第九周:[Leetcode]494. Target Sum

来源:互联网 发布:4g网络哪家好 编辑:程序博客网 时间:2024/05/29 14:38

You are given a list of non-negative integers, a1, a2, …, an, and a target, S. Now you have 2 symbols + and -. For each integer, you should choose one from + and - as its new symbol.
Find out how many ways to assign symbols to make sum of integers equal to target S.
Example 1:
Input: nums is [1, 1, 1, 1, 1], S is 3.
Output: 5
Explanation:
-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
There are 5 ways to assign symbols to make the sum of nums be target 3.


dfs列举所有可能性,判断结果是否符合给定的值


class Solution {public:    int findTargetSumWays(vector<int>& nums, int S) {        return dfs(nums,S,0,0);    }    int dfs(vector<int>& nums,int target,int cur_length,int cur_sum){        if(cur_length == nums.size()){            if(cur_sum == target)                return 1;            return 0;        }        return dfs(nums,target,cur_length + 1,cur_sum + nums[cur_length]) + dfs(nums,target,cur_length + 1,cur_sum - nums[cur_length]);    }};
0 0