題目地址:
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;
}
}