Target Sum
来源:互联网 发布:淘宝下架宝贝怎么删除 编辑:程序博客网 时间:2024/05/22 05:56
Descpition:
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.
Note:
The length of the given array is positive and will not exceed 20.
The sum of elements in the given array will not exceed 1000.
Your output answer is guaranteed to be fitted in a 32-bit integer.
解题思路:因为要找出所有满足运算后的结果等于给定数值的方法,所以可以使用dfs的思想来算出所有的结果,再把结果跟给定数值比较。之所以用dfs是因为我们可以想象出一棵树,树的每个节点带有一个数值,根节点的数值为0,根节点的左子节点与右子节点互为相反数,绝对值等于数组中的第一个元素的绝对值。示意图如下:
以数组[1,2]为例
但我们用不着去建立一棵树,只需要借鉴dfs的思想即可,程序如下:
class Solution {public: int findTargetSumWays(vector<int>& nums, int S) { dfs(nums, 0, 0, S); return count; }private: int count = 0; //记录数目 void dfs(vector<int>&nums, int level, int sum, int target) { //level表示访问到了第几层,sum记录和 if (level >= nums.size()) { if (sum == target) count++; return; } int sum1 = sum; int sum2 = sum; sum1 += nums[level]; sum2 -= nums[level]; dfs(nums, level + 1, sum1, target); //进行下一层的dfs dfs(nums, level + 1, sum2, target); }};
- Target Sum
- Target Sum
- Target Sum
- Target Sum
- Target Sum
- Target Sum
- Target Sum
- Target Sum
- Target Sum
- Target Sum
- Target Sum
- Target Sum
- LeetCode 494. Target Sum
- [LeetCode]494. Target Sum
- 494. Target Sum
- leetcode_middle_15_494. Target Sum
- [leetcode]494. Target Sum
- 494. Target Sum
- mysql表数据压缩
- 不用软件如何识别并提取图片上的文字
- as 上传项目到 github
- 又是一道题 Digit Counting
- VPN国内与国外网站转发至不同的DNS服务器解析,国内IP不经VPN
- Target Sum
- 我的Java学习之旅
- dubbo配置文件解读
- 在Windows上玩TensorFlow(使用Docker安装pull国内镜像)
- 大钉骑马走江湖 (bfs)
- 【Unity Shader】永远的主视图
- 装饰设计模式和开放-封闭原则
- VS2010-Debug&Release烦人的问题记录
- 新浪微博mid base62进制转10进制