剑指Offer 28题:
题目:
输入一个字符串,输出该字符串的所有排列。例如,输入'abc',输出abc、acb、bac、bca、cab、cba。
递归解决:
关键在于递归条件、边界条件、去重(例如‘aa’)
package cn.edu.bupt.sherry;
import java.util.ArrayList;
import java.util.HashSet;
public class PermutationProblem {
public static ArrayList<String> result = new ArrayList<String>();
public static HashSet<String> set = new HashSet<String>();
public static ArrayList<String> Permutation(String str) {
if(str == null || str.length() == 0)
return result;
else
Permutation(str,0,str.length()-1);
result.addAll(set);
return result;
}
public static void Permutation(String str,int start,int end){
char[] array = str.toCharArray();
String r = null;
if(start == end){
r = String.valueOf(array);
set.add(r);
}
else{
for(int i = start;i <= end;i++){
char tmp = array[start];
array[start] = array[i];
array[i] = tmp;
Permutation(String.valueOf(array),start+1,array.length-1);
tmp = array[start];
array[start] = array[i];
array[i] = tmp;
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String input = "aa";
ArrayList<String> result = Permutation(input);
for(int i = 0;i < result.size();i++)
System.out.println(result.get(i));
}
}