题目描述
输入一个字符串, 按字典序打印出该字符串中字符的所有排列。例如输入字符串abc, 则打印出由字符a, b, c所能排列出来的所有字符串abc, acb, bac, bca, cab和cba。
输入描述:
输入一个字符串, 长度不超过9 ( 可能有字符重复) , 字符只包括大小写字母。
import java. util. *;
public class Solution {
public ArrayList< String> Permutation ( String str) {
ArrayList< String> res = new ArrayList < String> ( ) ;
if ( str == null || str. length ( ) == 0 ) {
return res;
}
char [ ] chars = str. toCharArray ( ) ;
TreeSet< String> temp = new TreeSet < > ( ) ;
Permutation ( chars, 0 , temp) ;
res. addAll ( temp) ;
return res;
}
public void Permutation ( char [ ] chars, int begin, TreeSet< String> res) {
if ( chars == null || chars. length == 0 || begin < 0 || begin > chars. length - 1 ) {
return ;
}
if ( begin == chars. length - 1 ) {
res. add ( String. valueOf ( chars) ) ;
} else {
for ( int i = begin; i <= chars. length - 1 ; i++ ) {
swap ( chars, begin, i) ;
Permutation ( chars, begin + 1 , res) ;
swap ( chars, begin, i) ;
}
}
}
public void swap ( char [ ] x, int a, int b) {
char t = x[ a] ;
x[ a] = x[ b] ;
x[ b] = t;
}
}