直接回溯即可
没有重复项数字的所有排列
http://www.nowcoder.com/questionTerminal/4bcf3081067a4d028f95acee3ddcd2b1
回溯问题,注意从回溯到上一层时,要恢复列表的状态
ArrayList<ArrayList<Integer>> resList = new ArrayList<>();
public ArrayList<ArrayList<Integer>> permute(int[] num) {
if (num == null){
return null;
}
ArrayList<Integer> curlist = new ArrayList<>();
findPerm(num,curlist);
return resList;
}
private void findPerm(int[] num, List<Integer> list){
if (list.size() == num.length){
resList.add(new ArrayList<>(list));
return;
}
for (int i = 0; i < num.length; i++) {
if (!list.contains(num[i])){
list.add(num[i]);
findPerm(num,list);
list.remove(list.size() - 1);
}
}
}
查看7道真题和解析