当前位置: 首页 > article >正文

[LeetCode] 526. 优美的排列

题目描述:

假设有从 1 到 n 的 n 个整数。用这些整数构造一个数组 perm下标从 1 开始),只要满足下述条件 之一 ,该数组就是一个 优美的排列 :

  • perm[i] 能够被 i 整除
  • i 能够被 perm[i] 整除

给你一个整数 n ,返回可以构造的 优美排列 的 数量 。

示例 1:

输入:n = 2
输出:2
解释:
第 1 个优美的排列是 [1,2]:
    - perm[1] = 1 能被 i = 1 整除
    - perm[2] = 2 能被 i = 2 整除
第 2 个优美的排列是 [2,1]:
    - perm[1] = 2 能被 i = 1 整除
    - i = 2 能被 perm[2] = 1 整除

示例 2:

输入:n = 1
输出:1

提示:

  • 1 <= n <= 15

题目链接:

. - 力扣(LeetCode)

解题主要思路:

dfs暴力枚举即可,借助bool check[] 来记录是否遍历过该数字。当pos == n + 1时,代表遍历完了,递归结束。

解题代码:

class Solution {
public:
    int ret = 0;
    bool check[16];
    int countArrangement(int n) {
        dfs(1, n);
        return ret;
    }
    void dfs(int pos, int n)
    {
        // 递归结束条件
        if (pos == n + 1) {
            ++ret;
            return;
        }
        // 暴力枚举
        for (int i = 1; i <= n; ++i) {
            // 剪枝
            if (!check[i] && (i % pos == 0 || pos % i == 0)) {
                check[i] = true;
                dfs(pos+1, n);
                check[i] = false;  // 回溯
            }
        }
    }
};


http://www.kler.cn/a/370180.html

相关文章:

  • Golang Gin系列-5:数据模型和数据库
  • Cursor的详细使用指南
  • 数据结构之堆排序
  • linux如何并行执行命令
  • 3D 模型格式转换之 STP 转 STL 深度解析
  • MySQL面试题2025 每日20道【其四】
  • Docker | 校园网上docker pull或者docker run失败的一种解决方法
  • 探索C嘎嘎:认识string类
  • 【大数据分析与挖掘模型】matlab实现——非线性回归预测模型
  • 【计算机网络 - 基础问题】每日 3 题(五十七)
  • 《等保测评:安全与发展的双轮驱动》
  • 14 C语言中的关键字
  • Prometheus+Telegraf实现自定义监控项配置
  • RDD的常用转换算子
  • Qt实现播放器顶部、底部悬浮工具栏
  • typescript学习计划(一)--简单介绍typescript
  • VUE组件学习 | 六、v-if, v-else-if, v-else组件
  • OpenAI否认今年将发布“Orion”模型,其语音转写工具Whisper被曝存在重大缺陷|AI日报
  • 【C++】--------- 内存管理
  • 【spark】spark structrued streaming读写kafka 使用kerberos认证
  • 【网络篇】计算机网络——链路层详述(笔记)
  • List<T>属性和方法使用
  • springboot整合kafka
  • 【学习心得】远程root用户访问服务器中的MySQL8
  • 图片分类标注工具python
  • 团队文档管理有困难?总有一款工具合适你