【LeetCode】#46全排列(Permutations)
题目描述
给定一个没有重复数字的序列,返回其所有可能的全排列。
示例
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
Description
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>> res = new ArrayList<>();
helper(res, 0, nums);
return res;
}
public void helper(List<List<Integer>> res, int start, int[] nums){
if(start==nums.length){
List<Integer> list = new ArrayList<>();
for(int i=0; i<nums.length; i++){
list.add(nums[i]);
}
res.add(list);
}
for(int i=start; i<nums.length; i++){
swap(nums, i, start);
helper(res, start+1, nums);
swap(nums, i, start);
}
}
public void swap(int[] nums, int i, int j){
int temp = 0;
temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}