请教算法题『要求和等于自然数 n,每个加数都必需是小于等于 k 的正整数,不限加数的数量,有多少钟可能』的思路

2020-09-13 15:17:57 +08:00
 Newyorkcity

k 一定是正整数

比如 n = 3, k = 3,有:

3 = 3

3 = 2 + 1 ( 3=1+2 是同一种可能)

3 = 1 + 1 + 1

三种可能。

如果 n = 3 k = 2 则只有:

3 = 2 +1

3 = 1 + 1 + 1 三种可能


谢谢

692 次点击
所在节点    问与答
3 条回复
jingous
2020-09-13 15:37:27 +08:00
最简单的回溯法
jingous
2020-09-13 15:38:11 +08:00
class Solution {
public:
vector<vector<int>> SumEqualN(int n, int k) {
vector<vector<int>> res;
vector<int> tmp;
dfs(res,tmp,n,k,1,0);
return res;
}
void dfs(vector<vector<int>>& res, vector<int>& tmp, int n, int k, int idx, int sum){
if(sum == n){
res.push_back(tmp);
return ;
}
for(int i=idx; i<=k; ++i){
if(sum+i <= n){
tmp.push_back(i);
dfs(res,tmp,n,k,i,sum+i);
tmp.pop_back();
}
}
}
};
zxCoder
2020-09-13 15:47:46 +08:00
完全背包方案数

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/706602

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX