• combination sum(I, II, III, IV)


    II 简单dfs

     1 vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
     2         
     3         vector<vector<int>> ans;
     4         vector<int> cur;
     5         sort(candidates.begin(), candidates.end()); // 排序后去重
     6         dfs(0,target,candidates,cur,ans);
     7         return ans;
     8     }
     9     void dfs(int level, int target, vector<int>& candidates,vector<int>& cur,vector<vector<int>> &ans)
    10     {
    11         if(target==0)
    12         {
    13             ans.push_back(cur);
    14             return;
    15         }
    16         if(target<0)return;
    17         for(int i=level;i<candidates.size();i++)
    18         {
    19                 if (i > level && candidates[i] == candidates[i - 1])continue;// 去重
    20                 cur.push_back(candidates[i]);
    21                 dfs(i+1,target-candidates[i],candidates,cur,ans);
    22                 cur.pop_back();
    23         }
    24             
    25     }

    III 简单dfs递归,限制条件是k个数其和为n

     1     vector<vector<int>> combinationSum3(int k, int n) {
     2         vector<vector<int>> ans;
     3         vector<int> cur;
     4         dfs(k,n,1,cur,ans);
     5         return ans;
     6     }
     7     void dfs(int k,int n, int level, vector<int> &cur, vector<vector<int>> &ans)
     8     {
     9         if(k==0&&n==0)
    10         {
    11             ans.push_back(cur);
    12             return;
    13         }
    14         if(k==0)return;
    15         for(int i=level;i<=9;i++)
    16         {
    17             cur.push_back(i);
    18             dfs(k-1,n-i,i+1,cur,ans);
    19             cur.pop_back();
    20         }
    21     }

    IV 简单dp,dfs超时,记忆化dfs应该可以

    1         dp[0]=1;
    2         for(int i=1;i<=target;i++)
    3         {
    4             for(int j=0;j<nums.size();j++)
    5             {
    6                 if(nums[j]<=i)dp[i]+=dp[i-nums[j]];
    7             }
    8         }
    9         return dp[target];    
  • 相关阅读:
    团队作业2 需求分析与原型设计
    团队作业1
    获取公众号关注二维码url
    用户绑定公众号列表与未绑定公众号列表
    修改个人信息
    公众号登录
    idea去掉右侧小窗口代码块预览,idea去掉右侧代码预览
    微信退款 订单金额或退款金额与之前请求不一致,请核实后再试
    取消支付
    linux命令发送请求
  • 原文地址:https://www.cnblogs.com/demian/p/9699990.html
Copyright © 2020-2023  润新知