• LeetCode 39. Combination Sum


    Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T.

    The same repeated number may be chosen from C unlimited number of times.

    Note:

    • All numbers (including target) will be positive integers.
    • The solution set must not contain duplicate combinations.

    For example, given candidate set [2, 3, 6, 7] and target 7
    A solution set is: 

    [
      [7],
      [2, 2, 3]
    ] 

    Subscribe to see which companies asked this question

    用递归做该题显得复杂度很高, 但是我觉得没有什么更好的办法. 用递归最关键的是明确每一步所需要完成的操作, 这样写起来会比较容易.

     1 class Solution {
     2 public:
     3     void solve(int depth, int maxdepth, int target, vector<vector<int> >& result,vector<int>& candidates, vector<int>& ret)
     4     {
     5         for(int i=0;i<=target/candidates[depth];i++){
     6             if(target-i*candidates[depth]<0)break;
     7             ret[depth]=i;
     8 
     9             if(target-i*candidates[depth]==0){//完成目标,记录下来
    10                 vector<int> tmp;
    11                 tmp.clear();
    12                 for(int i=0;i<=maxdepth;i++)
    13                     for(int j=0;j<ret[i];j++){
    14                         tmp.push_back(candidates[i]);
    15                     }
    16                 result.push_back(tmp);
    17                 return;
    18             }
    19             
    20             if(depth+1==maxdepth+1){//最后一个数字的处理
    21                 continue;
    22             }
    23 
    24             solve(depth+1,maxdepth,target-i*candidates[depth],result,candidates,ret);
    25         }
    26     }
    27 
    28     vector<vector<int> > combinationSum(vector<int>& candidates, int target) {
    29         vector<vector<int> > result;
    30         sort(candidates.begin(),candidates.end());
    31         vector<int> ret;
    32         ret.resize(candidates.size()+1);
    33         solve(0,candidates.size()-1,target,result,candidates,ret);
    34 
    35         return result;
    36     }
    37 };
  • 相关阅读:
    linux 下内存检查工具 valgrind 及 sanitizer 编译选项及静态检查工具
    jQuery中 inArray
    CLEAN crxMouse Gestures 插件被标记为不安全
    如何理解DMZ?
    如何完整备份浏览器数据(Chrome、Firefox)
    Windows 分屏工具
    JS监听H5返回
    华为账号安全性怎么样?
    IOS Safari keyup不生效如何解决?
    如何下载JD图片 不带logo图片?
  • 原文地址:https://www.cnblogs.com/gremount/p/5953559.html
Copyright © 2020-2023  润新知