是不是沃尔玛现在ATM也不可以冲BB了?# Money - 海外理财
e*e
1 楼
抛砖引玉, any suggestion is welcome!
The idea is to sort the elements to be permuted if they are not already
sorted and restore to their original values after their permutation. Before
we go to next level, check to see if the num on the next level is the same
as current num. If yes, skip the next level.
public void permute(int[] perm, int level){
if ( level == perm.length ) {
System.out.println( new String( perm ) );
return;
}
int[] toBePermuted = null;
if ( !isSorted( perm, level ) ) {
toBePermuted = new int[perm.length-level];
for ( int i = level ; i < perm.length; i++ )
toBePermuted[i-level] = perm[i];
Arrays.sort( perm, level, perm.length );
}
for ( int i = level; i < perm.length; ) {
if ( level != i )
swap( perm, level, i );
permute( perm, level+1 );
if ( level != i )
swap( perm, level, i );
i++;
while ( i < perm.length && perm[i-1] == perm[i] )
i++;
}
if ( toBePermuted != null ) {
for ( int i = level ; i < perm.length; i++ )
perm[i] = toBePermuted[i-level];
}
}
private boolean isSorted( int[] num, int level ) {
for ( int i = level+1; i < num.length; i++ ) {
if ( num[i-1] > num[i] )
return false;
}
return true;
}
private void swap(int[] num, int i, int j) {...}
The idea is to sort the elements to be permuted if they are not already
sorted and restore to their original values after their permutation. Before
we go to next level, check to see if the num on the next level is the same
as current num. If yes, skip the next level.
public void permute(int[] perm, int level){
if ( level == perm.length ) {
System.out.println( new String( perm ) );
return;
}
int[] toBePermuted = null;
if ( !isSorted( perm, level ) ) {
toBePermuted = new int[perm.length-level];
for ( int i = level ; i < perm.length; i++ )
toBePermuted[i-level] = perm[i];
Arrays.sort( perm, level, perm.length );
}
for ( int i = level; i < perm.length; ) {
if ( level != i )
swap( perm, level, i );
permute( perm, level+1 );
if ( level != i )
swap( perm, level, i );
i++;
while ( i < perm.length && perm[i-1] == perm[i] )
i++;
}
if ( toBePermuted != null ) {
for ( int i = level ; i < perm.length; i++ )
perm[i] = toBePermuted[i-level];
}
}
private boolean isSorted( int[] num, int level ) {
for ( int i = level+1; i < num.length; i++ ) {
if ( num[i-1] > num[i] )
return false;
}
return true;
}
private void swap(int[] num, int i, int j) {...}