剑指Offer(Java版)第三十二题:输入一个字符串,按字典序打印出该字符串中字符的所有排列。 例如输入字符串abc, 则打印出由字符a,b,c所能排列出来的 所有字符串abc,acb,bac,bca,cab和cba。

/*
输入一个字符串,按字典序打印出该字符串中字符的所有排列。
例如输入字符串abc,
则打印出由字符a,b,c所能排列出来的
所有字符串abc,acb,bac,bca,cab和cba。
*/

import java.util.*;

public class Class32 {

public ArrayList<String> printNewArray(String str){
ArrayList<String> result = new ArrayList<String>();
if(str == null || str.length() == 0){
return result;
}
if(str != null && str.length() > 0){
printNewArrayMain(str.toCharArray(),0,result);
Collections.sort(result);;
}
return result;
}

public void printNewArrayMain(char[] data, int i, ArrayList<String> list){
if(data == null || data.length == 0){
return;
}
if(i < 0 || i > data.length - 1){
return;
}
if(i == data.length - 1){
if(!list.contains(String.valueOf(data))){
list.add(String.valueOf(data));
}
}else{
for(int j = i; j < data.length; j++){
swap(data,i,j);
printNewArrayMain(data,i+1,list);
swap(data,i,j);
}
}
}

public void swap(char[] data, int i, int j){
char temp = data[i];
data[i] = data[j];
data[j] = temp;
}

public static void main(String[] args) {
// TODO Auto-generated method stub

}

}

猜你喜欢

转载自www.cnblogs.com/zhuozige/p/12512486.html
今日推荐