emmm,是不是要生成全排列然后一个一个序列判断啊。。感觉要先生成全排列
class Solution {
int res = 0;
private void countIth( int N , int pos , int[] used){
if( pos > N ){
res++;
return;
}
else{
for( int i = 1 ; i <= N ; i ++ ){
if( used[ i ] == 0 && ( i % pos == 0 || pos % i == 0 )){
used[ i ] = 1;
countIth( N , pos + 1 , used );
used[ i ] = 0;
}
}
}
}
public int countArrangement(int N) {
if( N == 0 )return 0;
countIth( N , 1 , new int[ N + 1 ] );
return res;
}
}
感觉更为标准一点的全排列写法:
class Solution {
int res = 0;
private void permutation( int start , int[] nums ){
if( start == 0 ){
res ++ ;
return;
}
for( int i = start ; i > 0 ; i -- ){
if( start % nums[ i ] == 0 || nums[ i ] % start == 0 ){
swapp( nums, i , start);
permutation( start - 1 , nums );
swapp( nums, i , start );
}
}
}
void swapp( int[] nums , int a , int b ){
int tmp = nums[a];
nums[a ]= nums[b];
nums[b] = tmp;
}
public int countArrangement(int N) {
if( N < 1 )return 0;
int[] nums = new int[ N + 1 ];
for( int i = 1 ; i <= N ; i ++ )nums[ i ] = i;
permutation( N , nums );
return res;
}
}