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 {

    int K = 0, N = 0;

    public boolean canPartitionKSubsets(int[] nums, int k) {
int n = nums.length, sum = 0, eachSum = 0;
if (n == 0 || k == 0)
return false;
N = n;
K = k;
int[] arr = new int[k];
for (int i : nums)
sum += i;
if (sum % k != 0)
return false;
eachSum = sum / k;
Arrays.fill(arr, eachSum);
Arrays.sort(nums);
return helper(nums, n-1, arr);
} boolean helper(int[] nums, int cur, int[] arr) {
if (cur < 0)
return true;
int temp = nums[cur];
for (int i = 0; i < K; i++) {
if (arr[i] == temp || (cur > 0 && arr[i] - temp >= nums[0])) {
arr[i] -= temp;
if (helper(nums, cur - 1, arr)) {
return true;
}
arr[i] += temp;
}
}
return false;
}
}

最新文章

  1. jpa+springmvc+springdata(一)
  2. C语言fmod()函数:对浮点数取模(求余)
  3. nyoj 237 游戏高手的烦恼 二分匹配--最小点覆盖
  4. CCI_chapter 4 trees and Grapths
  5. 新闻公布系统 (Asp.net 三层架构 )
  6. linux 日志查看总结
  7. Servlet 浅谈(一)
  8. asp.net core+ef core
  9. Warning: Cannot modify header information - headers already sent by (output started at
  10. 为HTTP分类作序
  11. iOS: FFmpeg编译和使用 学习
  12. Web Api 使用模型验证
  13. C++入门篇四
  14. HTML中body元素的属性
  15. Cocos Creator代码编辑环境配置
  16. masterlab 敏捷项目管理工具
  17. 【转】CSR蓝牙驱动程序引起的Win7奇怪问题
  18. Python 测试
  19. Java知识回顾 (1) 编译环境与基本变量类型
  20. Android学习之——实现圆角Button

热门文章

  1. Redis 学习笔记(一) 字符串 SDS
  2. Coda docs
  3. vue.js 实现点击展开收起动画
  4. jmeter录制rabbitmq消息-性能测试
  5. 设计者模式之GOF23命令模式
  6. Sharding JDBC整合SpringBoot 2.x 和 MyBatis Plus 进行分库分表
  7. Java设计模式之建造者模式(Builder Pattern)
  8. Zookeeper 如何保证分布式系统数据一致性
  9. mysql 查询获取排名的方法(绝对有效)
  10. dTree