leetcode 494. 目标数
题目描述:
给定一个非负整数数组,a1, a2, ..., an, 和一个目标数,S。现在你有两个符号 + 和 -。对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面。
返回可以使最终数组和为目标数 S 的所有添加符号的方法数。
示例 1:
输入: nums: [1, 1, 1, 1, 1], S: 3
输出: 5
解释:
-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
一共有5种方法让最终目标和为3。
注意:
- 数组的长度不会超过20,并且数组中的值全为正数。
- 初始的数组的和不会超过1000。
- 保证返回的最终结果为32位整数。
思路分析:
思路一:用递归深搜,效率很低。存在重复计算。
思路二:动态规划。由于题目中说明了不会超过1000,利用一个2000的数组来存正数和负数。
代码:
思路一:
class Solution {
public:
long long dfs(vector<int>& nums, long long S, int start)
{
int n = nums.size();
if(start >= n)
return ;
if(start == n-)
{
if(S == nums[start] || S== -nums[start])
{
if(nums[start]==)
return ;
else
return ;
}
else
return ;
}
else
{
long long path1 = dfs(nums, S-nums[start], start+);
long long path2 = dfs(nums, S+nums[start], start+);
return path1+path2;
}
}
int findTargetSumWays(vector<int>& nums, int S) {
if(nums.size()==)
return ;
long long ans = dfs(nums, S, );
return ans;
}
};
思路二:
class Solution {
public:
int findTargetSumWays(vector<int>& nums, int S) {
if(nums.size()==)
return ;
int pre[], now[];
memset(pre, , sizeof(pre));
memset(now, , sizeof(now));
pre[]=;
for(int i=; i<nums.size(); i++)
{
for(int j=; j<; j++)
{
if(pre[j]!=)
{
now[j+nums[i]] += pre[j];
now[j-nums[i]] += pre[j];
}
}
for(int j=; j<; j++)
{
pre[j] = now[j];
now[j] = ;
}
}
if(S>)
return ;
else
return pre[+S];
}
};
leetcode 494. 目标数的更多相关文章
- [LeetCode]494. 目标和、416. 分割等和子集(0-1背包,DP)
题目一 494. 目标和 给定一个非负整数数组,a1, a2, ..., an, 和一个目标数,S.现在你有两个符号 + 和 -.对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前 ...
- Java实现 LeetCode 494 目标和
494. 目标和 给定一个非负整数数组,a1, a2, -, an, 和一个目标数,S.现在你有两个符号 + 和 -.对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面. 返回可 ...
- Leetcode之深度优先搜索(DFS)专题-494. 目标和(Target Sum)
Leetcode之深度优先搜索(DFS)专题-494. 目标和(Target Sum) 深度优先搜索的解题详细介绍,点击 给定一个非负整数数组,a1, a2, ..., an, 和一个目标数,S.现在 ...
- LeetCode第[1]题(Java):Two Sum (俩数和为目标数的下标)——EASY
题目: Given an array of integers, return indices of the two numbers such that they add up to a specifi ...
- C#版 - Leetcode 633. 平方数之和 - 题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...
- LeetCode:两数之和、三数之和、四数之和
LeetCode:两数之和.三数之和.四数之和 多数之和问题,利用哈希集合减少时间复杂度以及多指针收缩窗口的巧妙解法 No.1 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在 ...
- 34 Search for a Range(目标数的范围Medium)
题目意思:递增数组,找到目标数的范围,找不到则返回[-1,-1] 思路:折半查找 class Solution { public: vector<int> searchRange(vect ...
- C#版 - Leetcode 306. 累加数 - 题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...
- C#版(打败97.89%的提交) - Leetcode 202. 快乐数 - 题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...
随机推荐
- Mysql连接数过多、Mysql连接错误过多的问题处理
在使用Mysql的过程中,你总是会遇到这样那样的问题,每次去网上查找也相对比较麻烦,所以在此整理一下(以linux ubantu16 系统为例). ========================== ...
- TensorFlow NMT的词嵌入(Word Embeddings)
本文转载自:http://blog.stupidme.me/2018/08/05/tensorflow-nmt-word-embeddings/,本站转载出于传递更多信息之目的,版权归原作者或者来源机 ...
- git使用.gitignore文件忽略相关文件上传
在使用git时,有些文件是不需要上传到仓库中的,比如idea/eclipse相关的文件,编译后的文件(target目录)等. 可以使用.gitignore文件进行配置.在git本地仓库创建.gitig ...
- echarts 通过源码方法 传入对应data数据获取分割步长值
通过源码方法获取这里的分割数字长度 /** * Quantity of a number. e.g. 0.1, 1, 10, 100 * * @param {number} val * @return ...
- Python决策树可视化:GraphViz's executables not found的解决方法
参考文献: [1]Python决策树可视化:GraphViz's executables not found的解决方法
- 删除或关闭Word中的超链接
最近使用的word老是会把一些文字内容或者标题转换成乱七八糟的格式,看的莫名其妙的,找了好久也不知道什么问题,后来一查才知道是因为这些文字包含超链接,word自动转换了...你说是不是莫名其妙. 要关 ...
- Java并发编程-JUC-CountDownLatch 倒计数门闩器-等待多线程完成再放行 -一次性使用
如题 (总结要点) CountDownLatch 倒计数门闩器, 让1-n-1个线程等待其他多线程完成工作. (Excel的多个Sheet的解析,最终等待解析完毕后;要实现主线程等待所有线程完成she ...
- 项目Beta冲刺(团队)——用户试用调查报告
项目Beta冲刺(团队)--用户试用调查报告 格式描述 课程名称:软件工程1916|W(福州大学) 作业要求:项目Beta冲刺(团队) 团队名称:为了交项目干杯 作业目标:针对相应版本展开用户试用,完 ...
- python基础语法3 整形,浮点,字符串,列表
整形: ========================基本方法===========================用途: 一般用于定义整数:年龄.身份证号.qq号定义方式:age = 18 # a ...
- 如何移除woocommerce的tabs【wordpress技巧】
我们在用woocommerce建站时有时不想让产品的review显示出来,以使单个产品页面简单而令人印象深刻,那么要如何移除tab呢?可以在主题的function.php文件定义移除tabs函数,代码 ...