[leetcode]698. Partition to K Equal Sum Subsets

本文深入探讨了LeetCode上的第698题“Partition to K Equal Sum Subsets”,详细讲解了如何通过递归算法来判断是否能将一个整数数组分割成k个子集,每个子集的和相等。文章提供了具体的实现代码,帮助读者理解并掌握这一复杂问题的解决方法。

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

[leetcode]698. Partition to K Equal Sum Subsets


Analysis

终于抽到敬业福啦 哈哈哈—— [每天刷题并不难0.0]

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.
在这里插入图片描述

Explanation:

递归~

Implement

class Solution {
public:
    bool canPartitionKSubsets(vector<int>& nums, int k) {
        int sum = 0;
        int len = nums.size();
        vector<int> visit(len, 0);
        for(int num:nums)
            sum += num;
        if(k<=0 || sum%k!=0)
            return false;
        return helper(nums, visit, 0, k, 0, 0, sum/k);
    }
    bool helper(vector<int>& nums, vector<int>& visit, int s, int k, int cur_sum, int cur_num, int target){
        if(k == 1)
            return true;
        if(cur_sum == target && cur_num>0)
            return helper(nums, visit, 0, k-1, 0, 0, target);
        for(int i=s; i<nums.size(); i++){
            if(!visit[i]){
                visit[i] = 1;
                if(helper(nums, visit, i+1, k, cur_sum+nums[i], cur_num++, target))
                    return true;
                visit[i] = 0;
            }
        }
        return false;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值