【Leetcode刷题Python】494. 目标和
1 题目
给你一个整数数组 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
2 解析
0-1背包问题
记数组的元素和为s,是所有负数的和是neg,则正数的和为s−neg,得到的表达式的结果为
(s−neg)−neg=s−2⋅neg=target(s−neg)−neg=s−2⋅neg=target(s−neg)−neg=s−2⋅neg=target
即
neg=s−target2\textit{neg}=\dfrac{\textit{s}-\textit{target}}{2}neg=2s−target
由于数组nums 中的元素都是非负整数,neg 也必须是非负整数,所以上式成立的前提是 s−target 是非负偶数。若不符合该条件可直接返回 0。即
diff=s−targetdiff>0,diff%2==0diff = s-target\\diff>0 ,diff\%2 ==0 diff=s−targetdiff>0,diff%2==0
若上式成立,问题转化成在数组nums 中选取若干元素,使得这些元素之和等于neg,计算选取元素的方案数。我们可以使用动态规划的方法求解。转化为leetcode 518. 零钱兑换 II
3 python实现
class Solution:def findTargetSumWays(self, nums: List[int], target: int) -> int:diff = sum(nums)-targetif diff<0 or diff%2:return 0neg = int(diff/2)dp = [1]+[0]*negfor num in nums:for j in range(neg,num-1,-1):dp[j]+=dp[j-num]return dp[-1]
【Leetcode刷题Python】494. 目标和相关推荐
- LeetCode刷题Python实录
使用Python的LeetCode刷题 前言 题目 1408. 数组中的字符串匹配 508. 出现次数最多的子树元素和 1089. 复写零 剑指 Offer 14- I. 剪绳子 1175. 质数排列 ...
- 【Leetcode刷题Python】40. 组合总和 II
1 题目 给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的每个数字在每 ...
- 【Leetcode刷题Python】516. 最长回文子序列
1 题目 给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度. 子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列. 示例 1: 输入:s = &q ...
- 【代码】LeetCode刷题Python版
python版LeetCode 算法部分 811. 子域名访问计数 class Solution:def subdomainVisits(self, cpdomains):""&q ...
- 【Leetcode刷题Python】714. 买卖股票的最佳时机含手续费
1 题目 给定一个整数数组 prices,其中 prices[i]表示第 i 天的股票价格 :整数 fee 代表了交易股票的手续费用. 你可以无限次地完成交易,但是你每笔交易都需要付手续费.如果你已经 ...
- 【Leetcode刷题Python】55. 跳跃游戏
1 题目 给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 . 数组中的每个元素代表你在该位置可以跳跃的最大长度. 判断你是否能够到达最后一个下标. 示例 1: 输入:nums = [2 ...
- 【Leetcode刷题Python】生词本单词整理
1 题目 小A最近在努力学习英语.小A有一本生词本,专门用来记录见到的生词.每次小A看到一个自己不认识的单词时,就会把这个生词抄写到生词本上.经过几个月的学习之后,小A想对这个生词本上的单词进行整理. ...
- 【Leetcode刷题Python】416. 分割等和子集
1 题目 给你一个 只包含正整数 的 非空 数组 nums .请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等. 示例 1: 输入:nums = [1,5,11,5] 输出:true ...
- 【Leetcode刷题Python】174. 地下城游戏
1 题目 一些恶魔抓住了公主(P)并将她关在了地下城的右下角.地下城是由 M x N 个房间组成的二维网格.我们英勇的骑士(K)最初被安置在左上角的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主. ...
最新文章
- SAP物料移动过账之差异科目
- 深入了解WM_SIZE
- java 调用父类的变量_java创建子类对象设置并调用父类的变量操作
- Amazon Redshift数据库
- 微服务~Eureka实现的服务注册与发现及服务之间的调用
- 能运行shell吗_terminal, shell, bash, zsh
- ElementUI实现表单校验
- L298N模块详细使用教程
- PL/SQL中导出整个表、表结构、部分数据、以及导入整个表
- 项目实施过程中的风险控制
- 谷歌浏览器好用的插件
- 蓝桥杯真题 - 费解的开关题解
- SQL SERVER 软件和安装步骤
- 项目使用的 safe.cs 帮助类
- MYSQL —(二)筛选、聚合和分组、查询
- BUC算法简介与python实现
- 人工智能是研究开发能够模拟、延伸和扩展人类智能的技术
- 如何才能让手机厂商主动拥抱华为,接入鸿蒙系统?
- 深度学习——车道线检测
- 使用轮询方式进行ADC转换(野火STM32 MINI开发板)
热门文章
- Vue SSR 从入门到 Case Study
- C语言队列函数中pop,C语言_队列的基本操作
- 考研的利弊分析:什么人和专业适合考研?
- uniapp-ThorUi下拉框出现出现的问题
- ChatGPT教程之 02 ChatGPT 正在经历托马斯爱迪生的时刻,为什么需要获得突破性技术
- 江南大学计算机专业就业率,江南大学这些本科和硕士专业就业率100%!2019江大毕业生就业报告...
- 如果格局决定了人生,那么到底什么决定了格局?
- 四、VUE基础学习篇(循环v-for)- v-for、v-bind:key
- 作为程序员的你 是喜欢代码还是喜欢工作 ?
- 如何在Win10下,清空剪贴板