sum
如果可以通过将给定向量中的元素相加来实现,则目标是返回 true 。矢量元素可以以任何顺序使用和重用。
例子:
总和 = 7,列表 = [4,5]
return false 因为您不能使用这些列表元素来制作 7
总和 = 9 或 5 或 20 或 8,列表 = [4,5]
返回 true 因为 9 = 4+5, 5 已经在列表中, 20 = 5+5+5+5, 8 = 4 + 4
我不知道为什么canSum
不返回任何东西。当targetSum
达到 0 时,canSum
应该返回true
,然后在memo
we emplace
(remainder, true)。但是,该程序没有返回任何内容。这是为什么?
#include <iostream>
#include <vector>
#include <map>
using namespace std;
bool canSum(int targetSum, vector<int> &vec, map<int, bool> &memo) {
int remainder;
if (memo[targetSum] == true)
return true;
else if (targetSum == 0)
return true;
else if (targetSum < 0)
return false;
else
for (auto i : vec) {
remainder = targetSum - i;
if (canSum(remainder, vec, memo)) {
memo.emplace(remainder, true);
return true;
}
}
memo.emplace(remainder, false);
return false;
}
int main() {
vector<int> vector1{7, 14};
int sum = 300;
map<int, bool> memo;
if (canSum(sum, vector1, memo))
cout << "true";
else
cout << "false";
}