題目地址:
https://leetcode-cn.com/probl...
題目描述:
給定一個沒有重複數字的序列,返回其全部可能的全排列。java
示例:數組
輸入: [1,2,3]
輸出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
解答:
利用遞歸,咱們能夠認爲,求一個數組的全排列,就是把這個數組中的每一個位置的元素分別放在數組頭部
而後求剩餘元素的全排列,遞歸邊界是剩餘元素數量爲1,也就是說當數組中只剩一個元素的時候,它的全
排列就是它自己。
java ac代碼:code
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; } }