[LeetCode]Partition to K Equal Sum Subsets@Python

本文探讨了PartitiontoKEqualSumSubsets问题,即判断是否能将整数数组划分为k个子集,每个子集的和相等。通过深度优先搜索(DFS)结合回溯算法实现解决方案,并讨论了状态压缩DP方法的使用,为读者提供了一个清晰的算法思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Partition to K Equal Sum Subsets
Given an array of integers nums and a positive integer k, find whether it’s possible to divide this array into k non-empty subsets whose sums are all equal.

Example

Input: nums = [4, 3, 2, 3, 5, 2, 1], k = 4
Output: True
Explanation: It’s possible to divide it into 4 subsets (5), (1, 4), (2,3), (2,3) with equal sums.

Solution
看别人说DP用bitmasking做,但暂时没太看明白

class Solution:
    def canPartitionKSubsets(self, nums: List[int], k: int) -> bool:
        def dfs(index):
            if index==len(nums):
                return len(set(buck))== 1
            for i in range(k):
                print('i=%d'%(i),'index=%d'%(index))
                print(buck[i])
                buck[i] += nums[index]
                print(buck[i])
                if buck[i]<= nsum//k and dfs(index+1):
                    return True
                buck[i] -= nums[index]
                if buck[i]==0:
                    break
            return False
            
        nums.sort(reverse=True)
        nsum = sum(nums)
        if nsum%k != 0:
            return False
        if nums[0] > nsum//k:
            return False
        buck = [0]*k
        return dfs(0)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值