LeetCode-46 全排列
阿新 • • 發佈:2018-11-14
給定一個沒有重複數字的序列,返回其所有可能的全排列。
示例:
輸入: [1,2,3] 輸出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]
思路:遞迴實現
要點:找到遞迴結構
1.將陣列看作兩個子陣列:a1:下標0到n-2:,a2:下標n-1
2.遞迴求a1的全排列
3.將a2插入到第二步所有全排列結果的空隙 返回
4.遞迴出口:一個元素
class Solution { // 遞迴實現 查詢含有n個數的全排列 public List<List<Integer>> permute(int[] nums) { List<List<Integer>> resList=new ArrayList<>(); int len=nums.length; if(len==0) { resList.add(new ArrayList<Integer>()); return resList; } // 遞迴出口 if(len==1){ List<Integer> res=new ArrayList<Integer>(); res.add(nums[0]); resList.add(res); return resList; } // 若len>1遞迴 int[] numsNew=Arrays.copyOfRange(nums,0,len-1); List<List<Integer>> list=permute(numsNew); // 將最後一個數插入第n-1結果中 for(List<Integer> temp:list){ for(int i=0;i<=temp.size();i++){ List<Integer> resTemp=new ArrayList<Integer>(); for(int j=0;j<temp.size();j++){ resTemp.add(temp.get(j)); } resTemp.add(i,nums[len-1]); resList.add(resTemp); } } return resList; } }