目标和—leetcode494
给定一个非负整数数组,a1, a2, ..., an, 和一个目标数,S。现在你有两个符号 +
和 -
。对于数组中的任意一个整数,你都可以从 +
或 -
中选择一个符号添加在前面。
返回可以使最终数组和为目标数 S 的所有添加符号的方法数。
示例:
输入: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 位整数存下。
方法一:DFS暴力搜索
class Solution {
public:int findTargetSumWays(vector<int>& nums, int S) {int N=nums.size();int sum=0,result=0;DFS(nums,0,N,S,sum,result);return result;}void DFS(vector<int>& nums,int index,int N,int S,int sum,int &result){if(index==N){if(sum==S){result++;}return;}DFS(nums,index+1,N,S,sum+nums[index],result);DFS(nums,index+1,N,S,sum-nums[index],result);return;}
};
方法二:动态规划
class Solution {
public:int findTargetSumWays(vector<int>& nums, int S) {//第一步将所有元素进行求和long long sum = 0;for(int num : nums){sum += num;}//sum代表的含义是选择所有物品,[+,+,+...+],因为所有物品都是加号//S代表的所有物品求和去除某些物品的两倍,[+,+,-,-,+....-],负号的物品不但不选还需要重背包中取出同样重量的物品//sum + S代表的是S中选择的物品选择两次,(S中负号物品与sum中对应的正号物品抵消,剩下的正号物品选择了两次)long long myS = sum + S;if (sum < S || myS % 2 == 1){//剪枝return 0;}myS = myS / 2;//现在就是需要确定总重量为myS的情况数vector<int> dp(myS + 1,0);//dp[i]代表的是凑出重量为i的情况数dp[0] = 1;//进行动态规划for(int num : nums){for(int i = myS; i >= num; --i){dp[i] += dp[i-num];} } return dp[myS];}
};
目标和—leetcode494相关推荐
- 【代码随想录】-动态规划专题
文章目录 理论基础 斐波拉契数列 爬楼梯 使用最小花费爬楼梯 不同路径 不同路径 II 整数拆分 不同的二叉搜索树 背包问题--理论基础 01背包 二维dp数组01背包 一维数组(滚动数组) 装满背包 ...
- Makefile-----GNU
GNU Make 使用手册(中译版) 翻译:于凤昌 译者注:本人在阅读Linux源代码过程中发现如果要全面了解Linux的结构.理解Linux的编程总体设计及思想必须首先全部读通Linux源代码中各级 ...
- Leetcode494. 目标和
Leetcode494. 目标和 相似题目: Leetcode416. 分割等和子集 题目: 给你一个整数数组 numsnumsnums 和一个整数 targettargettarget . 向数组中 ...
- Leetcode--494. 目标和
给定一个非负整数数组,a1, a2, ..., an, 和一个目标数,S.现在你有两个符号 + 和 -.对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面. 返回可以使最终数组和 ...
- 浅显易懂 Makefile 入门 (03)— 目标文件搜索(VPATH 和 vpath 的区别和使用)、隐含规则
1. 目标文件搜索(VPATH和vpath) 如果需要的文件是存在于不同的路径下(即源文件与 Makefile 文件不在同一个路径下),在编译的时候就用到了 Makefile 中为我们提供的目录搜索文 ...
- LeetCode简单题之找出数组排序后的目标下标
题目 给你一个下标从 0 开始的整数数组 nums 以及一个目标元素 target . 目标下标 是一个满足 nums[i] == target 的下标 i . 将 nums 按 非递减 顺序排序后, ...
- LeetCode简单题之按既定顺序创建目标数组
题目 给你两个整数数组 nums 和 index.你需要按照以下规则创建目标数组: 目标数组 target 最初为空. 按从左到右的顺序依次读取 nums[i] 和 index[i],在 target ...
- LeetCode简单题之寻找比目标字母大的最小字母
题目 给你一个排序后的字符列表 letters ,列表中只包含小写英文字母.另给出一个目标字母 target,请你寻找在这一有序列表里比目标字母大的最小字母. 在比较时,字母是依序循环出现的.举个例子 ...
- 微调torchvision 0.3的目标检测模型
微调torchvision 0.3的目标检测模型 本文将微调在 Penn-Fudan 数据库中对行人检测和分割的已预先训练的 Mask R-CNN 模型.它包含170个图像和345个行人实例,说明如何 ...
最新文章
- 基于ArcGIS JS API实现垂直滑动缩放条
- 通俗易懂:贪心算法(二):区间问题 (力扣435无重叠区间)
- 如何查看oracle用户级别,用户级别的Oracle 导入导出
- C语言高级编程:指针和数组
- 【求助】AIX5.3主机下 memcached的内存使用异常
- matlab——使用gird函数画背景格
- ROS学习笔记二:探索ROS文件系统
- 奇安信专家:近八成软件存开源漏洞 供应链需全生命周期安全防护
- VMware 修复 NSA 报告的 0day
- GDAL更新至1.8.1后,通过属性查询矢量出错问题的解决方式
- LC-1186 连续子数组中可删除一个数的最大和
- Image(支持 XML 序列化),注意C#中原生的Image类是无法进行Xml序列化的
- C语言,函数调用使用方法
- 手机号段199/198/166,横空出世
- VMware 15.6版本下载安装
- SpringBoot+Quartz+数据库存储
- 德标螺纹规格对照表_(外)内六角螺塞标准编号-国家标准JB/德标DIN
- linux 安装 rtl8111e / r8168 驱动
- OpenPose:实时多人2D姿态估计
- 海思移植 APR(Apache Portable Runtime)