https://leetcode.com/problems/beautiful-arrangement/description/
题目:
假设你有1到N的N个整数,我们定义如果这N个整数可以组成数组后每第 i 位(1 ≤ i ≤ N)都满足下面两个要求之一就称其为漂亮的安排:
第 i 个位置的数字可以被 i 整除。
i 可以被第 i 个位置的数字整除。
现在给出N,你可以组成多少种漂亮的安排?
思路:DFS
class Solution {
public:
int sum = 0;
int back[20];
void dfs(int N,int l){
if(l>N){
sum++;
return ;
}
for(int x=1;x<=N;x++){
int ok = 1;
back[l] = x;
if(!(back[l]%l == 0 || l%back[l] == 0))
continue;
for(int y=1;y<l;y++)
if(back[l]==back[y]){
ok = 0;
break;
}
if(ok) dfs(N,l+1);
}
}
int countArrangement(int N) {
dfs(N,1);
return sum;
}
};