字符串排列问题
- 使用set去重,为了保证有序性使用TreeSet存储结果;
- 排列问题:讲究顺序(即 [2, 2, 3] 与 [2, 3, 2] 视为不同列表时),需要记录哪些数字已经使用过;【如果数组不包含重复元素,可以使用track.contains(nums[i])来排除已经添加过的元素】
- 在添加到res中时,一定要注意是:res.add(new LinkedList(track)); 或res.add(track.toString()); 使用res.add(track)相当于add了一个引用,故而会改变、是错误的
import java.util.*;
public class Solution {
Set res = new TreeSet();// 去重
public ArrayList Permutation(String str) {
char[] c = str.toCharArray();
StringBuilder sb = new StringBuilder();
boolean[] used = new boolean[str.length()];
helper(c,sb,used);
return new ArrayList(res);
}
void helper(char[] c, StringBuilder track, boolean[] used){
if(track.length() == c.length){
res.add(track.toString());
return;
}
for(int i = 0; i < c.length;i++){
if(used[i]) continue;
track.append(c[i]);
used[i] = true;
helper(c,track,used);
used[i] = false;
track.deleteCharAt(track.length()-1);
}
}
}