Given a collection of distinct integers, return all possible permutations.
Example:
Input: [1,2,3]
Output:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
题目的意思:给出一组数字,输出它的全排列。
看了那么多篇博客讲得不错而且清楚的是这篇
class Solution {
public List<List<Integer>> permute(int[] nums) {
List<List<Integer>> result=new ArrayList();
Process(result,nums,0);
return result;
}
private void Process(List<List<Integer>> result,int[] nums,int cur){
if(cur == nums.length){
List<Integer> temp=new ArrayList();
for(Integer item:nums){
temp.add(item);
}
result.add(temp);
}
else{
for(int i=cur;i<nums.length;i++){//从第一位开始往后移
Swap(nums,cur,i);
Process(result,nums,cur+1);//固定前i位,对后面cur位、cur+1位进行全排列
Swap(nums,cur,i);//区别于c++的数组拷贝,这里是直接在nums的基础上修改,所以为了保证后续结果交换正确,需要交换回来
}
}
}
private void Swap(int[] arr,int a,int b){
int temp=arr[a];
arr[a]=arr[b];
arr[b]=temp;
}
}
不懂的可以先打一遍