`

Permutations

阅读更多
Given a collection of distinct numbers, return all possible permutations.

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();
            }
        }
    }
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics