美文网首页
Permutations [leetcode]

Permutations [leetcode]

作者: 是什么样的心情 | 来源:发表于2019-06-02 17:49 被阅读0次

    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]

    这道题之前在《算法竞赛入门经典》里看到过,题目相对简单,很容易想到用递归来求解。虽然这道题明确说明排列的值是不同的,但是如果排列的元素里有重复值怎么处理呢?上述书中也有这样的讨论,然而我觉得书里的解释有点不好理解。在下一篇文章里我将给出我的思路。


    复杂度

    时间 O(nlogn) 空间 O(N)

    思路

    利用递归求解,将需要排列的数加入已经排列的list里,并将刚刚加入的数从需要排列的list里删去,这样问题规模变成n-1了,递归结束条件是没有剩余的需要排列的数。

    代码
    public List<List<Integer>> permute(int[] nums) {
        List<List<Integer>> list = new ArrayList<List<Integer>>();
        List<Integer> tempList = new ArrayList<Integer>();
        List<Integer> numsList = new ArrayList<Integer>();
        for(int i=0; i<nums.length; i++){
            numsList.add(nums[i]);
        }
        findPermutations(list, tempList, numsList);
        return list;
    }
    
    public void findPermutations(List<List<Integer>> list, List<Integer> tempList, List<Integer> nums){
        if(nums.size() < 1){
            list.add(new ArrayList(tempList));
        }
        else{
            for(int i=0; i<nums.size(); i++){
                int temp = nums.remove(0);
                tempList.add(temp);
                findPermutations(list ,tempList, nums);
                tempList.remove((Object)temp);
                nums.add(temp);
            }
        }
    }

    相关文章

      网友评论

          本文标题:Permutations [leetcode]

          本文链接:https://www.haomeiwen.com/subject/eqaxxctx.html