zoukankan      html  css  js  c++  java
  • 39. Combination Sum

    description:

    给定target, 求给定数列中找到几个数(其中的数可以重复使用,且一组数有几个也不做限制)的和为target
    Note:

    Example:

    Example 1:
    
    Input: candidates = [2,3,6,7], target = 7,
    A solution set is:
    [
      [7],
      [2,2,3]
    ]
    
    Example 2:
    
    Input: candidates = [2,3,5], target = 8,
    A solution set is:
    [
      [2,2,2,2],
      [2,3,3],
      [3,5]
    ]
    
    

    answer:

    class Solution {
    public:
        vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
            vector<vector<int>> res;
            vector<int> out;
            combinationSumDFS(candidates, target, 0, out, res);
            return res; 
            // return combinationSumDFS(candidates, target, 0, out, res); 这是我之前的写法,注意错误!!!
        }
        void combinationSumDFS(vector<int>& candidates, int target, int start, vector<int>& out, vector<vector<int>>& res){
            if (target < 0) return;
            if (target == 0) {res.push_back(out); return;}
            for (int i = start; i < candidates.size(); ++i) {
                out.push_back(candidates[i]);
                combinationSumDFS(candidates, target - candidates[i], i, out, res);
                out.pop_back();
            }
        }
    };
    

    relative point get√:

    像这种结果要求返回所有符合要求解的题十有八九都是要利用到递归,而且解题的思路都大同小异,相类似的题目有 Path Sum II,Subsets II,Permutations,Permutations II,Combinations 等等,如果仔细研究这些题目发现都是一个套路,都是需要另写一个递归函数

    hint :

  • 相关阅读:
    Docker _简单使用
    IDEA常见问题
    Linux安装JDK
    vitualbox网络设置链接
    MQ对比
    乐观锁和悲观所在数据库中的实现
    11.08 JS知识
    11.07知识整理
    11.06 知识整理
    本周知识整理
  • 原文地址:https://www.cnblogs.com/forPrometheus-jun/p/11156917.html
Copyright © 2011-2022 走看看