【leetcode】494. Target Sum
2024-08-25 15:07:21
题目如下:
解题思路:这题可以用动态规划来做。记dp[i][j] = x,表示使用nums的第0个到第i个之间的所有元素得到数值j有x种方法,那么很容易得到递推关系式,dp[i][j] = dp[i-1][j - nums[i]] + dp[i-1][j + nums[i]]。考虑到j可以为负数,因为j的取值范围是[-sum(nums) ,sum(nums)],为了保证在dp数组中的j一直为正数,我们做一个数组的向右平移,平移sum(nums)的长度,即把-sum(nums) 移动到0。
代码如下:
class Solution(object):
def findTargetSumWays(self, nums, S):
"""
:type nums: List[int]
:type S: int
:rtype: int
"""
Amount = sum(nums)
if S > Amount or S < -Amount:
return 0
MaxValue = max(nums)
dp = [[0 for x in xrange(2*(Amount+MaxValue)+1)] for x in nums]
dp[0][nums[0] + Amount] += 1
dp[0][-nums[0] + Amount] += 1
for i in xrange(1,len(dp)):
for j in xrange(-Amount,Amount+1):
dp[i][j + Amount] = dp[i - 1][j - nums[i]+ Amount] + dp[i - 1][j + nums[i] + Amount] #print dp return dp[len(nums)-1][S+ Amount]
最新文章
- 支付宝Andfix 原理解析
- WCF序列化
- Mysql命令行中文乱码的解决方法
- 学习Swift -- 错误处理
- 位运算 (&;|)与--或 一位数组表示多种意思~~ 与--或
- 【原创】纯OO:从设计到编码写一个FlappyBird (四)
- linode digitalocean哪个更好
- 对Vue.js $watch方法的理解
- 51nod_1639:绑鞋带
- 201521123042《Java程序设计》第11周学习总结
- [JSOI2007]合金
- WebApiClient的接口输入验证
- APP数据的爬取
- frist Django app — 三、 View
- Tomcat 启动时 SecureRandom 非常慢解决办法,亲测有效
- 小程序图表wx-chart
- Liferay7 BPM门户开发之8: Activiti实用问题集合
- Unity3d之树木创建的参数设定
- CentOS 离线安装Gitlab-ce
- iOS开发-观察者模式
热门文章
- C#简单工厂模式和单列设计模式潜要解析
- 手把手教你搭建一个 Elasticsearch 集群
- python 并发编程 多进程 Process对象的其他属性方法 terminate与is_alive name pid 函数
- Linux进程状态——top,ps中看到进程状态D,S,Z的含义
- C语言第八周编程作业
- 使用 PC 做 FTP/TFTP 服务器,上传和下载文件
- MySQL-快速入门(4)MySQL函数
- windows上zeal安装和使用--离线API文档
- P1622释放囚犯
- [多校联考2019(Round 5 T1)] [ATCoder3912]Xor Tree(状压dp)