题目链接:leetcode 494
1.题目
给你一个整数数组 nums 和一个整数 target 。
向数组中的每个整数前添加 ‘+’ 或 ‘-’ ,然后串联起所有整数,可以构造一个 表达式 :
例如,nums = [2, 1] ,可以在 2 之前添加 ‘+’ ,在 1 之前添加 ‘-’ ,然后串联起来得到表达式 “+2-1” 。
返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。
2.示例
1)示例 1:
输入:nums = [1,1,1,1,1], target = 3
输出:5
解释:一共有 5 种方法让最终目标和为 3 。
-1 + 1 + 1 + 1 + 1 = 3
+1 - 1 + 1 + 1 + 1 = 3
+1 + 1 - 1 + 1 + 1 = 3
+1 + 1 + 1 - 1 + 1 = 3
+1 + 1 + 1 + 1 - 1 = 3
2)示例 2:
输入:nums = [1], target = 1
输出:1
3)提示:
1 <= nums.length <= 20
0 <= nums[i] <= 1000
0 <= sum(nums[i]) <= 1000
-1000 <= target <= 1000
3.分析
这很明显是一道搜索的题目,挨个去枚举当前位置是“+”或者“-”,最后一个元素时候判断和是否是target即可
4.代码
class Solution {
public:int ans=0;void get_ans(int pos,int sum1,vector<int>& nums,int target){if(pos==nums.size()-1){if(sum1+nums[pos]==target) ans++;if(sum1-nums[pos]==target) ans++;return;}get_ans(pos+1,sum1+nums[pos],nums,target);get_ans(pos+1,sum1-nums[pos],nums,target);}int findTargetSumWays(vector<int>& nums, int target) {get_ans(0,0,nums,target);return ans;}
};