Given a collection of distinct numbers, return all possible permutations.
For example,
[1,2,3]
have the following permutations:
[1,2,3]
, [1,3,2]
, [2,1,3]
, [2,3,1]
, [3,1,2]
, and [3,2,1]
.
Subscribe to see which companies asked this question
求全排列
这么简单的一个题目硬是想了好久,,,最后看了别人的程序才知道用深搜,真的太弱了。
不过别人的程序是C++版本的,JAVA 写起来有一点点不一样。
用一个List<List<Integer>>保存结果,一个List<Integer>保存当前路径,一个List<Integer>保存剩下的路径。
下面是JAVA实现。
public class Solution {
public List<List<Integer>> permute(int[] nums) {
List<List<Integer>> res = new ArrayList<List<Integer>>();
List<Integer> middle = new ArrayList<Integer>();
for(int i = 0 ; i < nums.length ; i ++){
middle.add(nums[i]);
}
List<Integer> path = new ArrayList<Integer>();
getPermute(res, middle, path);
return res;
}
public void getPermute(List<List<Integer>> res,List<Integer> nums,List<Integer> path){
if(nums.size() == 0){
res.add(new ArrayList<Integer>(path));
}
else{
for(int i = 0 ; i < nums.size() ; i++){
path.add(nums.get(i));
nums.remove(i);
getPermute(res, nums, path);
nums.add(i,path.remove(path.size() -1));
}
}
}
}