首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >递归-数组划分为K个相等子集

递归-数组划分为K个相等子集

原创
作者头像
Swing Dunn
发布2025-11-11 14:40:57
发布2025-11-11 14:40:57
1750
举报
文章被收录于专栏:刷点题15天(一)刷点题15天(一)
代码语言:txt
复制
# 给定一个整数数组 nums 和一个正整数 k,找出是否有可能把这个数组分成 k 个非空子集,其总和都相等。

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

nums = list(map(int, input().split(',')))
k = int(input())


def getResult(nums, k):
    total = sum(nums)
    s_nums = sorted(nums)
    if total % k != 0:
        return False
    everage = total // k
    if s_nums[-1] > everage:
        return False
    
    arr = [everage] * k
    pos = len(nums) - 1
    
    return dfs(s_nums, pos, arr, k)

def dfs(nums, pos, arr, k):
    if pos < 0:
        return True
    for i in range(k):
        if i > 0 and arr[i] == arr[i-1]:
            continue
        if arr[i] ==nums[pos] or (pos > 0 and arr[i] - nums[pos] >= nums[0]):
            arr[i] -= nums[pos]
            if dfs(nums, pos - 1, arr, k):
                return True
            arr[i] += nums[pos]

    return False

print(getResult(nums, k))

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档