zoukankan      html  css  js  c++  java
  • 【leetcode】416. Partition Equal Subset Sum

    题目如下:

    解题思路:对于这种判断是否的题目,首先看看动态规划能不能解决。本题可以看成是从nums中任选i个元素,判断其和是否为sum(nums)/2,很显然从nums中任选i个元素的和的取值范围是[0,sum(nums)],这里就可以用一个dp数组来保存nums中任选i个元素的和的取值的和,记dp[v] = 1表示可以从nums中任选i个元素使得其和等于v,dp[v] = 0 则表示不可以。那么nums中任意元素nums[i]来说,只要找出dp[0,sum(nums[0:i-1])] 中所有为1的元素,记为j,可以有dp[nums[i] + j] = 1 if dp[j] = 1。

    代码如下:

    class Solution(object):
        def canPartition(self, nums):
            """
            :type nums: List[int]
            :rtype: bool
            """
            if sum(nums) % 2 == 1:
                return False
            nums.sort()
            dp = [0] * (sum(nums)+1)
            dp[nums[0]] = 1
            total = nums[0]
            for i in range(1,len(nums)):
                for j in range(total+1):
                    if dp[j] == 1:
                        dp[j + nums[i]] = 1
                total += nums[i]
            #print dp
            return dp[sum(nums)/2] == 1
  • 相关阅读:
    学生信息录入系统
    作业11(增删改查listview)
    作业10(qq增删改查)
    作业9
    作业8
    作业7
    右键打开Windows Terminal
    axure 动态面板中滚动条
    TortoiseSVN服务端的配置与使用
    hfs使用小技巧
  • 原文地址:https://www.cnblogs.com/seyjs/p/9578067.html
Copyright © 2011-2022 走看看