Given a collection of distinct integers, return all possible permutations.
Input: [1,2,3] Output: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]
题意:
打印全排列
Solution1: Backtracking
形式化的表示递归过程:permutations(nums[0...n-1]) = {取出一个数字} + permutations(nums[0...n-1] - 该数字)
code
1 /* 2 Time: O(n!) 3 Space: O(n!). We allocate space to keep N! paths. 4 */ 5 6 7 class Solution { 8 public List<List<Integer>> permute(int[] nums) { 9 List<List<Integer>> result = new ArrayList<>(); 10 // corner case 11 if (nums == null || nums.length == 0) return result; 12 List<Integer> path = new ArrayList<>(); 13 helper(nums, path, result); 14 return result; 15 } 16 17 private void helper(int[] nums, List<Integer> path, List<List<Integer>> result){ 18 // base case 19 if(path.size() == nums.length){ 20 result.add(new ArrayList<>(path)); 21 return; 22 } 23 24 for(int i = 0; i< nums.length; i++){ 25 if(path.contains(nums[i])) continue; 26 path.add(nums[i]); 27 helper(nums, path, result); 28 path.remove(path.size() - 1); 29 } 30 } 31 }