LeetCode 494. Target Sum

36 阅读1分钟

🔗 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;
    }
};