46. Permutations
和combinations比起来,需要多加一个used的数组标记这个数字有没有被用过。
1 public List<List<Integer>> permute(int[] nums) { 2 List<List<Integer>> res = new ArrayList<List<Integer>>(); 3 if(nums == null || nums.length == 0) { 4 return res; 5 } 6 boolean[] used = new boolean[nums.length]; 7 helper(nums, res, new ArrayList<Integer>(), used); 8 return res; 9 } 10 11 private void helper(int[] nums, List<List<Integer>> res, List<Integer> item, boolean[] used) { 12 if(item.size() == nums.length) { 13 if(!res.contains(item)) { 14 res.add(new ArrayList<Integer>(item)); 15 } 16 return; 17 } 18 for(int i = 0; i < nums.length; i++) { 19 if(used[i] != true) { 20 used[i] = true; 21 item.add(nums[i]); 22 helper(nums, res, item, used); 23 item.remove(item.size() - 1); 24 used[i] = false; 25 } 26 } 27 return; 28 }