leetcode 494. 目标数
2024-09-08 14:21:27
题目描述:
给定一个非负整数数组,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];
}
};
最新文章
- dubbox微服务实例及引发的“血案”
- 设计模式之行为类模式大PK
- 编写CLR存储过程中使用SqlDataRecord
- dbcp/c3p0连接池设置mysql会话变量
- uboot命令分析+实现【转】
- 把自定义类实例存储到LSO
- 疑难杂症:NoSuchMethodError: com.opensymphony.xwork2.util.finder.UrlSet.includeClassesUrl(Lcom/opensymphony/xwork2/util/finder/ClassLoaderInterface;)
- JavaScript之聊天室设计摸拟
- javaweb学习总结十(xml解析<;SAX以及DOM方式>;)
- TC Asia Competition
- [C++关键字] alignof &; alignas 内存对齐 sizeof 占内存大小
- mysql三种binlog日志的理解
- java.lang.NoSuchMethodError: main Exception in thread ";main";
- POJ Oulipo (KMP)
- Java数据类型(基本数据类型)学习
- CVE-2017-8464复现 (远程快捷方式漏洞)
- nginx的autoindex,目录浏览,配置和美化,美观的xslt_stylesheet
- 2019新版UI设计面试题汇总(附答案)
- 洛谷 P3956 棋盘(BFS)
- CMake 示例
热门文章
- 2019-08-01 jquery中常用方法
- 滥用exchage远程调用域管理员API接口
- Cheat Engine 自动注入
- nmap的使用方法
- c#中的解析HTML组件 -- (HtmlAgilityPack,Jumony,ScrapySharp,NSoup,Fizzler)
- javax.persistence.PersistenceException: Unable to build entity manager factory
- 项目Beta冲刺(4/7)(追光的人)(2019.5.26)
- python应用-猜数字游戏
- Spring Cloud Stream 知识点
- wordpress站点更换域名了如何快速设置