题目理解:题目个给的字符串中可能包含重复的字符,你给出的解中也要包含这些重复的字符,但是解集中不应该包含重复的解。
import java.util.ArrayList;
public class Solution {
public ArrayList<String> Permutation(String str) {
// 2016-04-11
ArrayList<String> rst = new ArrayList<String>();
if (str == null || str.length() == 0) {
return rst;
}
char[] chars = str.toCharArray();
ArrayList<Character> list = new ArrayList<Character>();
help(rst, list, chars);
return rst;
}
private void help(ArrayList<String> rst, ArrayList<Character> list, char[] leftChars) {
if (list.size() == leftChars.length) {
String str = "";
for (Character each : list) {
str += each;
}
if (!rst.contains(str)) { // 可能导致问题
rst.add(str);
}
}
for (int i = 0; i < leftChars.length; i++) {
if (leftChars[i] == 0) {
continue;
}
char thisChar = leftChars[i];
list.add(thisChar);
leftChars[i] = 0;
help(rst, list, leftChars);
list.remove(list.size() - 1);
leftChars[i] = thisChar;
}
}
}