🔗 leetcode.com/problems/ta…
题目
- 给若干个数,在数字中间可以穿插 + 和 -,求组成的表达式的结果等于 target 的不同表达式的个数
思路
- 回溯,枚举每个数字前为 + 或者 - 最终表达式的和
- 递归条件是,枚举到最后一个数字,如果此时表达式的 sum 等于 target,则计数
- 回溯的性能不是最好,但是能 AC,更优的解法是 DP,先不展开了
代码
class Solution {
public:
int ans
void dfs(vector<int>& nums, int target, int index, int sum) {
if (index == nums.size()) {
if (sum == target) ans++
return
}
sum += nums[index]
dfs(nums, target, index + 1, sum)
sum -= nums[index]
sum -= nums[index]
dfs(nums, target, index + 1, sum)
}
int findTargetSumWays(vector<int>& nums, int target) {
ans = 0
dfs(nums, target, 0, 0)
return ans
}
}