给定一个数字列表,返回其所有可能的排列。
注意事项
你可以假设没有重复数字。
给出一个列表[1,2,3]
,其全排列为:
[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]
]
//回溯法 public class Solution { public List<List<Integer>> permute(int[] nums) { ArrayList<List<Integer>> lists = new ArrayList<>(); if (nums == null) return lists; if (nums.length == 0) { lists.add(new ArrayList<Integer>()); return lists; } ArrayList<Integer> list = new ArrayList<Integer>(); helper(lists, list, nums); return lists; } public void helper(ArrayList<List<Integer>> lists, ArrayList<Integer> list, int[] nums){ //如果已经全部排完 if(list.size() == nums.length) { lists.add(new ArrayList<Integer>(list)); return; } for(int i = 0; i < nums.length; i++){ if(list.contains(nums[i])){ continue; }else{ list.add(nums[i]); helper(lists, list, nums); list.remove(list.size() - 1); } //list.remove(list.size() - 1);这里也可以 } } }