For example,
[1,2,3] have the following permutations:
[1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], and [3,2,1].
全排列的问题,同样用回溯法,回溯的边界条件我们可以通过每个结果的长度来判断,当结果的长度为给定数组的长度时,我们就开始回溯。往下寻找的时候,开始位置我们都从0开始,但这样会有重复的元素被记录,所以我们要加一个判断,判断当前元素是否已经被记录。代码如下:
public class Solution { public List<List<Integer>> permute(int[] nums) { LinkedList<Integer> list = new LinkedList<Integer>(); LinkedList<List<Integer>> llist = new LinkedList<List<Integer>>(); if(nums == null || nums.length == 0) return llist; getPermute(0, nums, list, llist); return llist; } public void getPermute(int start, int[] nums, LinkedList<Integer> list, LinkedList<List<Integer>> llist) { if(list.size() == nums.length) { llist.add(new LinkedList<Integer>(list)); } for(int i = start; i < nums.length; i++) { if(!list.contains(nums[i])) { list.add(nums[i]); getPermute(0, nums, list, llist); list.removeLast(); } } } }