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.
思路:本题使用动态规划以及深度优先搜索的思想,对数组中的每一个元素分为正号和负号,递归进行相加,判断最终结果与S是否相同。
void help(vector<int>&nums, int S, int &count, int index, int now_sum) { if (index >= nums.size()) { if (now_sum == S) { count++; } return; } now_sum += nums[index]; index++; help(nums, S, count, index, now_sum); index--; now_sum -= nums[index]; now_sum -= nums[index]; index++; help(nums, S, count, index, now_sum); } class Solution { public: int findTargetSumWays(vector<int>& nums, int S) { if (nums.size() == 0) { return 0; } int count = 0, index = 0, now_sum = 0; help(nums, S, count, index, now_sum); return count; } };