题解 | #没有重复项数字的全排列#

没有重复项数字的全排列

https://www.nowcoder.com/practice/4bcf3081067a4d028f95acee3ddcd2b1

代码:

public class Solution {
    //我的思路,取出来一个元素,然后剩下的元素去排,排的时候加上取出来那个。
    public ArrayList<ArrayList<Integer>> permute(int[] num) {
        // if (num.length == 1) {
        //     ArrayList<Integer> list1 = new ArrayList<>(1);
        //     list1.add(num[0]);
        //     ArrayList<ArrayList<Integer>> list2 = new ArrayList<>(1);
        //     list2.add(list1);
        //     return list2;
        // }
        int length = num.length;

        //先把num排序
        Arrays.sort(num);
        //转数组
        List<Integer> sourceList = new ArrayList<>();
        Arrays.stream(num).forEach(v -> sourceList.add(v));

        List<Integer> list = new ArrayList<>(); //依次保存取出来的元素
        ArrayList<ArrayList<Integer>> resultList = new ArrayList<>();

        // for (Integer i : sourceList) {
        //     list.add(i);
        //     m1(sourceList, i, list, resultList, length);
        // }

        m1(sourceList, null, list, resultList, length);
        return resultList;
    }

    void m1 (List<Integer> sourceList, Integer toRemove, List<Integer> list,
             ArrayList<ArrayList<Integer>> resultList, int length) {
        List<Integer> sourceList2 = new ArrayList<>(sourceList); //深拷贝
        sourceList2.remove(toRemove);
        for (Integer i : sourceList2) {
            ArrayList<Integer> list2 = new ArrayList<>(list); //深拷贝
            list2.add(i);
            if (list2.size() == length) {
                resultList.add(list2);
            } else {
                m1(sourceList2, i, list2, resultList, length);
            }
        }
    }
}

我的做题步骤:

考虑到使用迭代。

我的思路:取出来一个元素,然后剩下的元素去排,排的时候加上取出来那个。然后再取第二个元素,剩下元素去排。

遇到的问题:

1)代码提交后第一个问题出现在深拷贝

这行代码写到了for循环之上,这样会导致第一个元素,一直被放到list中。

2)迭代的初始,不好写初始迭代,用了for循环。

这样也是会导致第一个元素,一直被放到list中。改进,去掉for循环,直接调递归,第一次传入一个null。此时,数组长度等于1的情况也合并到了递归里。

总结:

1)本题,肉眼自测测得不对。

2)迭代的初始步骤,不太会写。我目前的写法是先大概写出来,然后调用递归。后期再看能不能合并到递归里,包括特殊情况也合并到递归里。

全部评论

相关推荐

11-28 17:58
门头沟学院 Java
美团 JAVA开发 n×15.5
牛客786276759号:百度现在晋升很难的 而且云这块的业务没美团好 你看百度股价都跌成啥样了
点赞 评论 收藏
分享
11-09 14:54
已编辑
华南农业大学 产品经理
大拿老师:这个简历,连手机号码和照片都没打码,那为什么关键要素求职职位就不写呢? 从上往下看,都没看出自己到底是产品经理的简历,还是电子硬件的简历? 这是一个大问题,当然,更大的问题是实习经历的描述是不对的 不要只是去写实习流程,陈平,怎么去开会?怎么去讨论? 面试问的是你的产品功能点,是怎么设计的?也就是要写项目的亮点,有什么功能?这个功能有什么难处?怎么去解决的? 实习流程大家都一样,没什么优势,也没有提问点,没有提问,你就不得分 另外,你要明确你投的是什么职位,如果投的是产品职位,你的项目经历写的全都是跟产品无关的,那你的简历就没用 你的面试官必然是一个资深的产品经理,他不会去问那些计算机类的编程项目 所以这种四不像的简历,在校招是大忌
点赞 评论 收藏
分享
专心打鱼:互联网搬运工,贴子都要偷
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务