题目地址:https://leetcode-cn.com/probl… 题目描述:给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3] 输出:[[1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]] 解答:利用递归,我们可以认为,求一个数组的全排列,就是把这个数组中的每个位置的元素分别放在数组头部然后求剩余元素的全排列,递归边界是剩余元素数量为 1,也就是说当数组中只剩一个元素的时候,它的全排列就是它本身。java ac 代码:
class Solution {
List<List<Integer>>ans = new ArrayList(1000);
public List<List<Integer>> permute(int[] nums) {
perm(nums,0,nums.length-1);
return ans;
}
void perm(int[] nums,int i,int j)
{
if(i == j)
{
List<Integer> temp = new ArrayList(nums.length);
for(int k = 0;k < nums.length;k++)temp.add(nums[k]);
ans.add(temp);
return;
}
for(int k = i;k <= j;k++)
{
swap(nums,i,k);
perm(nums,i+1,j);
swap(nums,i,k);
}
}
void swap(int[] nums,int i,int j)
{
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}