LeetCode-46.全排列(考察點:回溯演算法)
阿新 • • 發佈:2019-01-31
給定一個沒有重複數字的序列,返回其所有可能的全排列。
示例:
輸入: [1,2,3]
輸出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
解題思路:這個...感覺很難講明白,大家看程式碼自己體會吧......
java程式碼:
class Solution { public List<List<Integer>> permute(int[] nums) { List<List<Integer>> result = new LinkedList<>(); int[] flag = new int[nums.length]; List<Integer> innerLS = new ArrayList<>(nums.length); helper(nums, flag, nums.length, innerLS, result); return result; } void helper(int[] nums, int[] flag, int leftCnt, List<Integer> innerLS, List<List<Integer>> outerLS){ if(0 == leftCnt){ outerLS.add(innerLS); return; } for(int index = 0; index < nums.length; index++){ if(0 == flag[index]){ int[] f = Arrays.copyOf(flag, flag.length); List<Integer> i = new ArrayList<>(innerLS); int left = leftCnt; f[index] = 1; i.add(nums[index]); helper(nums, f, --left, i, outerLS); } } } }