zoukankan      html  css  js  c++  java
  • 【leetcode】494. Target Sum

    题目如下:

    解题思路:这题可以用动态规划来做。记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]
            
  • 相关阅读:
    Misc1
    PXE
    VCL
    pacman usage
    .vimrc的配置
    Windows Server 2012 R2
    Windows 入门杂乱无章版
    VS Code Plugins And Configuration
    「Poetize5」GF弹钢琴
    「Poetize4」上帝造题的七分钟2
  • 原文地址:https://www.cnblogs.com/seyjs/p/9088152.html
Copyright © 2011-2022 走看看