求一组不重复数的所有排列,用回溯法来遍历,不过这种回溯不需要回头。大概思路就是用一个递归函数,每次选择一个之前没选过的数加入到当前list中,最后如果选完了所有的数,加入到结果中。
算法并不难,主要是语法上遇到一些问题,比如关于list的使用。
总结:
1. list<list <Integer> > 这种二维的list,声明的时候还是和一维一样
results = new ArrayList<>();
2.将一个list加入到results中时,语法应该是
results.add(new ArrayList<>(v) );
3.list的remove操作,参数有对象和下标两种选择,如果要移除刚刚add进来的元素,可以写
v.remove(v.size() - 1);
完整代码:
import java.util.*;
class Solution {
List<List<Integer> > results;
public List<List<Integer> > permute(int[] nums) {
results = new ArrayList<>();
List<Integer> v = new ArrayList<Integer>();
re(v, nums);
return results;
}
public void re(List<Integer> v, int [] nums) {
if(v.size() == nums.length){results.add(new ArrayList<>(v) ); return ; }
for(int i : nums) {
if(!v.contains(i)) {
v.add(i);
re(v, nums);
v.remove(v.size() - 1);
}
}
}
}