leetcode526 优美的排列
回溯水题
代码:
class Solution {
int[] res;
int cnt = 0;
public void swap(int i, int j){
int tmp = res[i];
res[i] = res[j];
res[j] = tmp;
}
public void backTrack(int pos, int n){
if(pos == n){
cnt++;
}else{
for(int i = pos;i < n;i++){
swap(i,pos);
if(res[pos]%(pos+1)==0 || (pos+1)%res[pos]==0){
backTrack(pos+1, n);
}
swap(i, pos);
}
}
}
public int countArrangement(int n) {
res = new int[n];
for(int i = 0;i < n;i++){
res[i] = i+1;
}
backTrack(0, n);
return cnt;
}
}
46ms 35MB