zoukankan      html  css  js  c++  java
  • leetcode——39. 组合总和

    给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。

    candidates 中的数字可以无限制重复被选取。

    说明:

    所有数字(包括 target)都是正整数。
    解集不能包含重复的组合。 
    示例 1:

    输入: candidates = [2,3,6,7], target = 7,
    所求解集为:
    [
    [7],
    [2,2,3]
    ]
    示例 2:

    输入: candidates = [2,3,5], target = 8,
    所求解集为:
    [
      [2,2,2,2],
      [2,3,3],
      [3,5]
    ]

    自己下分析一通,越想越复杂,看了别人的做法才发现人家用到了回溯与剪枝的方法。

    这是我第一次认真看一道回溯题的解法,人家的讲解无比清晰,容易理解,看明白了的我感到很开心。

    我自己没有再写。等到下次复习的时候再自己做,这里先留个坑。

    看别人的解题方法真的是超棒的体验!!!!

    我也要加油哦!!!!!!

                                                                                            ——2019.10.13

    public List<List<Integer>> combinationSum(int[] candidates, int target) {
            //先对candidates进行排序
            Arrays.sort(candidates);
            List<List<Integer>> list = new ArrayList<>();
            Deque<Integer> path = new ArrayDeque<>();
            isAvailable(candidates,0,target,path,list);
            return list;
        }
    
        private void isAvailable(int[] candidates,int start, int sum,Deque<Integer> path,List<List<Integer>> list) {
            if (sum == 0) {
                List<Integer> l = new ArrayList<>(path);
                list.add(l);
                return;
            }
            if (!path.isEmpty() && candidates[start] < path.peek()) {
                return;
            }
            for(int i = start;i<candidates.length;i++) {
                if (sum < candidates[i]) {
                    return;
                } else {
                    sum = sum - candidates[i];
                    path.addLast(candidates[i]);
                    isAvailable(candidates, i, sum, path, list);
                    path.removeLast();
                    sum = sum + candidates[i];
                }
            }
        }

    回溯,剪枝,dfs

    自己可以做出来,但是花了挺长时间的。

    ——2020.6.29

    我的前方是万里征途,星辰大海!!
  • 相关阅读:
    关于返回上一页功能
    Mybatis Update statement Date null
    SQLite reset password
    Bootstrap Validator使用特性,动态(Dynamic)添加的input的验证问题
    Eclipse使用Maven2的一次环境清理记录
    Server Tomcat v7.0 Server at localhost failed to start
    PowerShell一例
    Server Tomcat v7.0 Server at libra failed to start
    商标注册英语
    A glance for agile method
  • 原文地址:https://www.cnblogs.com/taoyuxin/p/11668502.html
Copyright © 2011-2022 走看看