思路就是回溯法,与全排列等同//DFS搜索,每前进一步,必须满足两个条件之一,分情况往下走(全排列问题)
class Solution {
int count=0;
public int countArrangement(int N) {
int[] visited=new int[N+1];
countArrangement(1,N,visited);
return count;}
public void countArrangement(int step,int N,int[] visited){
if(step==N+1) {
count++; return;
}
for(int i=1;i<=N;i++) { //用过的不能再次使用,避免重复
if(visited[i]==0) {
visited[i]=1; //限制条件进行,剪枝
if(i%step==0||step%i==0) { countArrangement(step+1,N,visited);
}
visited[i]=0;
}
}
}}