1.全排列
全排列
class Solution {
List< List< Integer> > res = new ArrayList < > ( ) ;
LinkedList< Integer> path = new LinkedList < > ( ) ;
boolean [ ] used;
public List< List< Integer> > permute ( int [ ] nums) {
if ( nums. length== 0 ) {
return res;
}
used = new boolean [ nums. length] ;
permuteHelper ( nums) ;
return res;
}
void permuteHelper ( int [ ] nums) {
if ( path. size ( ) == nums. length) {
res. add ( new ArrayList < > ( path) ) ;
return ;
}
for ( int i= 0 ; i< nums. length; i++ ) {
if ( used[ i] ) continue ;
path. add ( nums[ i] ) ;
used[ i] = true ;
permuteHelper ( nums) ;
used[ i] = false ;
path. removeLast ( ) ;
}
}
}
2.全排列 II
全排列 II
class Solution {
List< List< Integer> > res = new ArrayList < > ( ) ;
LinkedList< Integer> path = new LinkedList < > ( ) ;
boolean [ ] used;
public List< List< Integer> > permuteUnique ( int [ ] nums) {
used = new boolean [ nums. length] ;
Arrays. sort ( nums) ;
Arrays. fill ( used, false ) ;
backTracking ( nums, used) ;
return res;
}
void backTracking ( int [ ] nums, boolean [ ] used) {
if ( path. size ( ) == nums. length) {
res. add ( new ArrayList < > ( path) ) ;
return ;
}
for ( int i= 0 ; i< nums. length; i++ ) {
if ( i> 0 && nums[ i] == nums[ i- 1 ] && used[ i- 1 ] == false ) continue ;
if ( used[ i] == false ) {
path. add ( nums[ i] ) ;
used[ i] = true ;
backTracking ( nums, used) ;
used[ i] = false ;
path. removeLast ( ) ;
}
}
}
}