377. 组合总和 Ⅳ

坚强是说给别人听的谎言 提交于 2020-03-18 17:03:00
 1 //递归+记忆化
 2 class Solution 
 3 {
 4     vector<int> memo;
 5 public:
 6     int combinationSum4(vector<int>& nums, int target) 
 7     {
 8         //memo数组一般取target + 1
 9         memo = vector<int>(target + 1,-1);
10         return DFS(nums,target);
11     }
12 
13     int DFS(vector<int>& nums,int target)
14     {
15         //如果target减到0,结果加1
16         if(target == 0) return 1;
17         
18         //如果当前和的值不为-1,则存在,直接返回即可
19         if(memo[target] != -1) return memo[target];
20 
21         int res = 0;//计数
22         for(auto a : nums)
23         {
24             //当前和必须大于等于当前数,则进行递归
25             if(target >= a) res += DFS(nums,target - a);
26         }
27         memo[target] = res;//循环做完之后保存res在记忆化数组里
28         return res;
29     }
30 };

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!