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
    
    
  • 相关阅读:
    .charAt()方法
    CustomerBiz方法运用
    面向对象_方法 判断
    方法
    查找无序数组索引
    面向对象_购票
    创建类 方法 构建类对象
    StringBuffer 方法
    docker创建redis mysql 等服务
    docker常用的命令
  • 原文地址:https://www.cnblogs.com/sandy-t/p/13188516.html
Copyright © 2011-2022 走看看