377. 组合总和 IV
题目链接:
本题是爬楼梯的又一变式。
分析样例可知,每次选择的都可以是
可以认为我们每次从
因此爬楼梯那个题可以认为是本题条件下
实现一、记忆化搜索
定义
所以有
(仅在
递归边界为
递归入口为
爬楼梯那个题的递推表示也可以由此来推出,即
class Solution { public: int combinationSum4(vector<int>& nums, int target) { int n = nums.size(); vector<int> memo(target + 1, -1); function<int(int)> dfs = [&] (int i) -> int { if (i == 0) return 1; int &res = memo[i]; if (res != -1) return res; res = 0; for (auto x : nums) { if (x <= i) res += dfs(i - x); } return res; }; return dfs(target); } };
实现二、递推
注意这里需要开到
class Solution { public: int combinationSum4(vector<int>& nums, int target) { int n = nums.size(); vector<unsigned long long> f(target + 1); f[0] = 1; for (int i = 1; i <= target; i++) { for (auto x : nums) { if (x <= i) f[i] += f[i - x]; } } return f[target]; } };
本文作者:胖柚の工作室
本文链接:https://www.cnblogs.com/pangyou3s/p/18136993
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步