您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    450,什么叫回溯算法,一看就会,一写就废(4)
    时间:2020-09-15 12:46 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

    }private void backtrack(List<List<Integer>> list, List<Integer> tempList, int[] nums) { 

        //终止条件 

        if (tempList.size() == nums.length) { 

            //阐明找到逐一组组合 

            list.add(new ArrayList<>(tempList)); 

            return

        } 

        for (int i = 0; i < nums.length; i++) { 

            //由于不能有重复的,所以有重复的就不能选 

            if (tempList.contains(nums[i])) 

                continue

            //选择以后值 

            tempList.add(nums[i]); 

            //递归 

            backtrack(list, tempList, nums); 

            //撤销选择 

            tempList.remove(tempList.size() - 1); 

        } 

    是不是觉得很复杂。

    子集成绩

    给定一组不含重复元素的整数数组 nums,前往该数组一切能够的子集(幂集)。

    阐明:解集不能包含重复的子集。

    示例:

    输入: nums = [1,2,3]

    输入:

    输入: nums = [1,2,3] 

    输入: 

    [3], 

    [1], 

    [2], 

    [1,2,3], 

    [1,3], 

    [2,3], 

    [1,2], 

    [] 

    我们还是依据模板来修正吧

    public List<List<Integer>> subsets(int[] nums) { 

        List<List<Integer>> list = new ArrayList<>(); 

        //先排序 

        Arrays.sort(nums); 

        backtrack(list, new ArrayList<>(), nums, 0); 

        return list; 

    (责任编辑:admin)