我有一个数字 n,我必须将它分成 k 个数字,使得所有 k 个数字都是不同的,k 个数字的总和等于 n 并且 k 最大。例如,如果 n 为 9,则答案应为 1,2,6。如果 n 为 15,则答案应为 1,2,3,4,5。
这就是我尝试过的 -
void findNum(int l, int k, vector<int>& s)
{
if (k <= 2 * l) {
s.push_back(k);
return;
}
else if (l == 1) {
s.push_back(l);
findNum(l + 1, k - 1, s);
}
else if(l == 2) {
s.push_back(l);
findNum(l + 2, k - 2, s);
}
else{
s.push_back(l);
findNum(l + 1, k - l, s);
}
}
最初 k = n 且 l = 1。结果数字存储在 s 中。该解决方案即使返回数字 n 作为 k 个不同数字的总和,但它不是最佳解决方案(k 不是最大)。 n = 15 的示例输出为 1,2,4,8。应该进行哪些更改才能获得正确的结果?