标签:优美 int pos perm 力扣 vis 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 整除
提示:
1 <= n <= 15
思路
回溯,设一个访问数组,标记某个数字是否已用
代码
class Solution {
private:
vector<int> vis = vector<int>(20, 0);
int ans = 0;
public:
void dfs(int pos, int n) {
if(pos > n) ans++;
for(int i = 1; i <= n; i++) {
if(vis[i]) continue;
if(pos % i == 0 || i % pos == 0) {
vis[i] = 1;
dfs(pos + 1, n);
vis[i] = 0;
}
}
return;
}
int countArrangement(int n) {
dfs(1, n);
return ans;
}
};
标签:优美,int,pos,perm,力扣,vis,526,回溯,整除 来源: https://blog.csdn.net/lllzzzhhh2589/article/details/122779529
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。