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