题目描述:
假设有从 1 到 N 的 N 个整数,如果从这 N 个数字中成功构造出一个数组,使得数组的第 i 位 (1 <= i <= N) 满足如下两个条件中的一个,我们就称这个数组为一个优美的排列。条件:
第 i 位的数字能被 i 整除
i 能被第 i 位上的数字整除
现在给定一个整数 N,请问可以构造多少个优美的排列?
思路:
全排列,但是增加一个剪枝的条件
代码如下:
class Solution {
public:
int res=0;
vector<bool>visited;
int countArrangement(int N) {
visited=vector(N+1,false);
dfs(1,N);
return res;
}
void dfs(int cur,int N){
if(cur==1+N){
res++;
return;
}
for(int i=1;i<=N;i++){
if(!visited[i]&&(i%cur==0||cur%i==0)){
visited[i]=true;
dfs(cur+1,N);
visited[i]=false;
}
}
}
};