zoukankan      html  css  js  c++  java
  • 动态规划_leetcode494

    #coding=utf-8

    # 递归1 递归到底

    # 序列选与不选的模板题 o(2**n) 20190307 找工作期间
    class Solution1(object):
    def findTargetSumWays(self, nums, S):
    """
    :type nums: List[int]
    :type S: int
    :rtype: int
    """
    self.res = 0

    if not nums or not S:
    return self.res

    self.trySum(nums,S,0)

    print self.res

    return self.res


    def trySum(self,nums,target,index):

    if index == len(nums)-1:
    if nums[index] == target or -nums[index] == target:
    self.res += 1
    return

    self.trySum(nums,target-nums[index],index+1)
    self.trySum(nums,target+nums[index],index+1)




    # s = Solution1()
    #
    # nums1 = [1, 1, 1, 1, 1]
    # ts1 = 3
    #
    #
    # s.findTargetSumWays(nums1,ts1)


    # 递归2
    # 层次递归 :不使用全局变量
    class Solution2(object):
    def findTargetSumWays(self, nums, S):
    """
    :type nums: List[int]
    :type S: int
    :rtype: int
    """


    if not nums or not S:
    return 0


    return self.trySum(nums,S,0)



    def trySum(self,nums,target,index):


    res = 0

    if index == len(nums)-1:
    if nums[index] == target or -nums[index] == target:
    res += 1
    return res

    res += self.trySum(nums,target-nums[index],index+1)
    res += self.trySum(nums,target+nums[index],index+1)

    return res


    # s = Solution2()
    #
    # nums1 = [1, 1, 1, 1, 1]
    # ts1 = 3
    #
    #
    # print s.findTargetSumWays(nums1,ts1)


    #https://blog.csdn.net/qq_17550379/article/details/82939713

    # 记忆化递归


    class Solution3(object):
    def findTargetSumWays(self, nums, S):
    """
    :type nums: List[int]
    :type S: int
    :rtype: int
    """


    if not nums :
    return 0


    self.memo = {}

    return self.trySum(nums,S,0)



    def trySum(self,nums,target,index):


    pair = (index,target)

    if pair in self.memo:
    return self.memo[pair]

    res = 0

    if index == len(nums):
    if target == 0:
    res += 1

    return res

    res += self.trySum(nums,target-nums[index],index+1)
    res += self.trySum(nums,target+nums[index],index+1)

    self.memo[pair] = res
    return res


    # s = Solution3()
    #
    # nums1 = [1, 1, 1, 1, 1]
    # ts1 = 3
    #
    #
    # print s.findTargetSumWays(nums1,ts1)


    # 动态规划
    # https://blog.csdn.net/qq_17550379/article/details/82939713
    # https://www.cnblogs.com/onlyac/p/6986139.html
    class Solution4(object):
    def findTargetSumWays(self, nums, S):
    """
    :type nums: List[int]
    :type S: int
    :rtype: int """ total = sum(nums) memo = [[0] * (2*total+1) for i in range(len(nums) + 1)] memo[0][total] = 1 for i in range(1,len(nums)+1): for j in range(2*total+1): if j+nums[i-1] < 2*total+1: memo[i][j] += memo[i-1][j+nums[i-1]] if j-nums[i-1] >=0: memo[i][j] += memo[i-1][j-nums[i-1]] return memo[len(nums)][total+S]
  • 相关阅读:
    这两天又是一次巨大的飞跃
    防范式编程:
    泛型那点儿事儿 泛型概述 简单样例代码
    FindPrivateKey X509
    Remoting Generic Async Queue (Release 3) 不受 Remoting 对象生存期过期约束
    AntiXSS Library v3.0
    X509 static RSACryptoServiceProvider 高并发加解密
    EncodingHelper Identify Encoding by BOM
    NetStatTool
    EditPlus 于 20090602 升级到 v3.11(340)
  • 原文地址:https://www.cnblogs.com/lux-ace/p/10546727.html
Copyright © 2011-2022 走看看