当前位置:网站首页>LeetCode_494_目标和
LeetCode_494_目标和
2022-07-29 14:00:00 【Fitz1318】
题目链接
题目描述
给你一个整数数组 nums
和一个整数 target
。
向数组中的每个整数前添加 '+'
或 '-'
,然后串联起所有整数,可以构造一个 表达式 :
例如,nums = [2, 1]
,可以在 2
之前添加 '+'
,在 1
之前添加 '-'
,然后串联起来得到表达式 "+2-1"
。
返回可以通过上述方法构造的、运算结果等于 target
的不同 表达式 的数目。
示例 1:
输入:nums = [1,1,1,1,1], target = 3
输出:5
解释:一共有 5 种方法让最终目标和为 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
+1 + 1 + 1 + 1 - 1 = 3
示例 2:
输入:nums = [1], target = 1
输出:1
提示:
1 <= nums.length <= 20
0 <= nums[i] <= 1000
0 <= sum(nums[i]) <= 1000
-1000 <= target <= 1000
解题思路
动态规划
- 将这些数分为两堆,+号为left,-号为right。然后相加和为
target
,也就是left + right = target
- 此外
left - right = sum
,可以得到left = (sum + target) / 2
- 对于一个固定数组来说,
sum
和target
都是确定的,所以left
可以求出来,此时问题就转换为在集合nums
中找出和为left
的组合,也就是装满容量为left
的背包有几种方法
动态规划五部曲
- 确定
dp
数组以及下标的含义dp[j]
:装满j
容量的背包,有dp[j]
种方法
- 确定递推公式
- 在不考虑
nums[i]
的情况下,装满容量为j - nums[i]
的背包,有dp[j- nums[i]]
种方法 - 因此
dp[j] += dp[j - nums[i]]
- 在不考虑
dp
数组初始化dp[0] = 1
,也就是装满容量为0的背包,有1种方法:就是装0个东西
- 确定遍历顺序
- 01背包问题种,
nums
放在外循环,且是正序。target
放在内循环,且为倒序
- 01背包问题种,
AC代码
class Solution {
public int findTargetSumWays(int[] nums, int target) {
int sum = 0;
for (int i : nums) {
sum += i;
}
if ((target + sum) % 2 != 0) {
return 0;
}
int bagWeight = (sum + target) / 2;
if (bagWeight < 0) {
bagWeight = -bagWeight;
}
int[] dp = new int[bagWeight + 1];
dp[0] = 1;
for (int i = 0; i < nums.length; i++) {
for (int j = bagWeight; j >= nums[i]; j--) {
dp[j] += dp[j - nums[i]];
}
}
return dp[bagWeight];
}
}
边栏推荐
- 没遇到过这三个问题都不好意思说用过Redis
- 如何使用MISRA改进嵌入式编程
- 力扣541. 反转字符串 II ----双指针解法
- 如何使用SparkSQL做一些简单的数据分析和可视化展示?
- 为什么 ThreadLocal 可以做到线程隔离?
- Children's programming electronics (graphical programming Scratch secondary level exam parsing (choice) in June 2022
- PytestFixture实战应用+Pytest.ini与conftest.py应用详解+Fixture及yield实现用例前置后置
- 全球级的分布式数据库 Google Spanner原理 热:报错
- 第4章_2——视图的使用
- AI全流程开发难题破解之钥
猜你喜欢
2022年了!还在用定时器实现动画?赶紧试试requestAnimationFrame吧!
84.(cesium之家)cesium模型在地形上运动
rosbag数据画图MATLAB
系列文章|云原生时代下微服务架构进阶之路 - Boris
Some thoughts on paying for knowledge
C#线程操作UI控件
kubernetes cks strace etcd
【模板引擎】微服务学习笔记六:freemarker模板引擎的常用命令介绍
【JS面试题】面试官问我:遍历一个数组用 for 和 forEach 哪个更快?
The new technical director, who is in the form of a isXxx Boolean type definition, tomorrow need not come!
随机推荐
工作效率-十五分钟让你快速学习Markdown语法到精通排版实践备忘
新来技术总监:谁在用 isXxx 形式定义布尔类型,明天不用来了!
AI全流程开发难题破解之钥
【pytorch】1.6 tensor 基本运算
84.(cesium之家)cesium模型在地形上运动
如何使用SparkSQL做一些简单的数据分析和可视化展示?
PyQt5快速开发与实战 7.1 信号与槽介绍
深开鸿:万物智联的大江上,升起一轮开源鸿蒙月
第4章_1——SQL语句实现MySQL增删改查
R Error in :missing values are not allowed in subscripted assignments of data frames
gdb调试常用概念整理
力扣541. 反转字符串 II ----双指针解法
即时通讯移动端开发之网络连接优化
为什么字符串使用final关键字
Interfaces and Abstractions
PAT serie a A1021 Deepest Root
项目经理:不错啊!SSO单点登录代码写出来了,把时序图也画一下?
基于降噪自编码器与改进卷积神经网络的采煤机健康状态识别
TCP和UDP的基本认识
How to Improve Embedded Programming with MISRA