zoukankan      html  css  js  c++  java
  • LeetCode 698.划分为k个相等的子集

    给定一个整数数组 nums 和一个正整数 k,找出是否有可能把这个数组分成 k 个非空子集,其总和都相等。

    示例 1:

    输入: nums = [4, 3, 2, 3, 5, 2, 1], k = 4
    输出: True
    说明: 有可能将其分成 4 个子集(5),(1,4),(2,3),(2,3)等于总和。

    提示:

    1 <= k <= len(nums) <= 16
    0 < nums[i] < 10000

    class Solution:
        def canPartitionKSubsets(self, nums: List[int], k: int) -> bool:
            target, rem = divmod(sum(nums), k)
            if rem!=0:
                return False
    
            nums = sorted(nums)   ## 先进行排序
            print(nums)
            cur = [0]*k
            return self.canPartitionKSubsets_helper(nums,cur,target)
    
        def canPartitionKSubsets_helper(self,nums,cur,target):
            if len(nums) == 0: ## 所有数都安放完成,返回True
                return True
            num = nums.pop()   ## 拿出最大值开始搜索
            for i, value in enumerate(cur):
                if value + num <= target:   ## 如果满足要求递归进行搜索
                    cur[i]+=num
                    if self.canPartitionKSubsets_helper(nums,cur,target):
                        return True 
                    cur[i]-=num             ## 递归返回后恢复上一层状态 
                if value == 0:             ## 尽量将0放在最后进行搜索
                    break
            nums.append(num)
            return False
    
    
  • 相关阅读:
    xpath的几个常用规则
    xpath定位不到原因浅析
    这一代人得学习
    scrapy之Request对象
    cookie字段属性解析
    selenium中get_cookies()和add_cookie()的用法
    python中生成器generator
    swagger demo code
    ctrip-apollo
    eclipse 快捷键使用日志
  • 原文地址:https://www.cnblogs.com/sandy-t/p/13188516.html
Copyright © 2011-2022 走看看