文章目录

  • 1. 题目
  • 2. 解题

1. 题目

给定一个整数数组 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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/partition-to-k-equal-sum-subsets
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

类似题目:LeetCode 416. 分割等和子集(动态规划)

  • 普通回溯,超时,59 / 149 个通过测试用例
class Solution {int target;bool ans = false;int K;
public:bool canPartitionKSubsets(vector<int>& nums, int k) {int sum = accumulate(nums.begin(), nums.end(), 0);K = k;if(sum%k) return false;target = sum/k;vector<int> partsum(k, 0);dfs(nums, partsum, 0);return ans;}void dfs(vector<int>& nums, vector<int>& partsum, int i){if(ans == true) return;if(i == nums.size()){bool flag = true;for(int k = 0; k < K; k++){if(partsum[k] != target){flag = false;break;}}if(flag)ans = true;return;}for(int j = 0; j < K; ++j){if(partsum[j]+nums[i] <= target){partsum[j] += nums[i];dfs(nums, partsum, i+1);partsum[j] -= nums[i];}}}
};
  • 优化,从大到小排序,可以尽快的让每个部分的和凑够
class Solution {int target;bool ans = false;int K;
public:bool canPartitionKSubsets(vector<int>& nums, int k) {int sum = accumulate(nums.begin(), nums.end(), 0);K = k;if(sum%k) return false;target = sum/k;sort(nums.rbegin(), nums.rend());//从大到小排序if(nums[0] > target)//最大的数超过了,不行return false;vector<int> partsum(k, 0);dfs(nums, partsum, 0);return ans;}void dfs(vector<int>& nums, vector<int>& partsum, int i){if(ans == true) return;if(i == nums.size()){bool flag = true;for(int k = 0; k < K; k++){if(partsum[k] != target){flag = false;break;}}if(flag)ans = true;return;}for(int j = 0; j < K; ++j){if(partsum[j]+nums[i] <= target){partsum[j] += nums[i];dfs(nums, partsum, i+1);partsum[j] -= nums[i];}}}
};

168 ms 9.2 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 698. 划分为k个相等的子集(回溯)相关推荐

  1. Leetcode 698. 划分为k个相等的子集 解题思路及C++实现

    解题思路: 这是一个典型的深度优先搜索问题.使用一个相同大小的数组visited来记录元素是否被访问过(即是被已被划分到相应的子集中). 每找到一个划分子集,相应对k减一,再继续执行深度优先搜索程序. ...

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

    题目描述 给定一个整数数组 nums 和一个正整数 k,找出是否有可能把这个数组分成 k 个非空子集,其总和都相等. 示例 1: 输入: nums = [4, 3, 2, 3, 5, 2, 1], k ...

  3. leetcode 698. Partition to K Equal Sum Subsets | 698. 划分为k个相等的子集(回溯法)

    题目 https://leetcode.com/problems/partition-to-k-equal-sum-subsets/ 题解 一上来以为是 dp(想到了左神讲的,将一个数组分成两个尽可能 ...

  4. 力扣 698. 划分为k个相等的子集

    题目 给定一个整数数组 nums 和一个正整数 k,找出是否有可能把这个数组分成 k 个非空子集,其总和都相等. 示例 输入: nums = [4, 3, 2, 3, 5, 2, 1], k = 4 ...

  5. leetcode算法题--划分为k个相等的子集★

    原题链接:https://leetcode-cn.com/problems/partition-to-k-equal-sum-subsets/ 相关问题:分隔等和子集 递归的方法其实不难想,但是很难写 ...

  6. Leetcode 1400:构造K个回文字符串(超详细的解法!!!)

    给你一个字符串 s 和一个整数 k .请你用 s 字符串中 所有字符 构造 k 个非空 回文串 . 如果你可以用 s 中所有字符构造 k 个回文字符串,那么请你返回 True ,否则返回 False ...

  7. LeetCode 698.Partition_to_k_equal_subsets. Three different solutions: DFS, DP, DP topdown + DFS

    Problem Partition a set A=(a1,a2,...,an)A=(a_1,a_2,...,a_n)A=(a1​,a2​,...,an​) to kkk disjointed sub ...

  8. 划分计算机发展的四个阶段主要依据,计算机的发展划分为4个阶段,分别为什么、什么、什么和什么。...

    计算机的发展划分为4个阶段,分别为什么.什么.什么和什么.以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 计算机的发展划 ...

  9. 把一个c类的网络地址192-168-1-0划分为6个子网,请计算出...

    6<2^3=8 所以可划分为8个等长子网,子网号从主机号位借3位,每个子网可容纳2^5-2=30台主机,其中主机号全1全0不可用 11000000.10101000.00000001.00000 ...

最新文章

  1. 使用Typescript的巧妙React上下文技巧-不是Redux
  2. spring boot多数据源配置(mysql,redis,mongodb)实战
  3. xmx java_为什么我的Java进程比Xmx消耗更多的内存?
  4. 使用Phpstorm实现远程开发
  5. 数据结构c语言版第二版第三章课后答案,数据结构(C语言版)习题集答案第三章.doc...
  6. leetcode950. Reveal Cards In Increasing Order
  7. python实现50行代码_利用 50行Python 代码构建一个在线文本生成器!
  8. 通过哈希MD5实现加密(python3.X)
  9. 传智播客java基础入门pdf
  10. 软件工程师笔试编程题
  11. 想多赚钱!程序员如何把副业搞得风生水起?
  12. win11桌面图标怎么调大小
  13. 可能是你见过最强的猜数字游戏(doge
  14. 抓到Netty一个隐藏很深的内存泄露Bug | 详解Recycler对象池的精妙设计与实现
  15. 你住的房子安全吗?-房屋安全鉴定四项须知
  16. Pycharm新手使用教程(详解)
  17. 【Go】Map 的空间利用率统计
  18. 章子怡谈生活:渴望有自己的小孩
  19. 2W 字详解 Redis 集群环境搭建实践
  20. 输出一个浮点数,保留三位小数

热门文章

  1. python对excel表统计视频教程_Python实现对excel文件列表值进行统计的方法
  2. 【Python】最新Python学习路线(完整详细版,含整套教程)
  3. 融云通讯服务器,vue使用融云即时通讯,老是报了发送失败,服务器超时
  4. opencv双目视觉标定、匹配和测量 (附代码)
  5. html 转word c#,c#操作word类,进行html和word文档的互相转换
  6. webrtc笔记(1): 基于coturn项目的stun/turn服务器搭建
  7. CF617E XOR and Favorite Number
  8. Python之路,week03 - Python基础3
  9. Redis入门指南(第2版) Redis设计思路学习与总结
  10. activity-启动动画的设定(下面弹出出现,弹入下面消失)