698. Partition to K Equal Sum Subsets
来源:互联网 发布:程序员 团队贡献 编辑:程序博客网 时间:2024/06/05 20:51
问题描述:
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.
给一个数组和一个正整数k,返回该数组是否可以分成k个子数组且各个子数组中的数和相等
问题解决:
算出数组中数的总和sum和平分成k份的值target
首先介绍递归函数recursive
传入原数组,要找到的目标数target2以及遍历数组的起始位置begin
从begin位置向前(即从大到小)遍历数组,每轮循环有三种情况
1.该数为0,已经分过组的数,continue
2.该数为target2,将该数置0,成功分组的组数加1,返回true
3.判断recursive(nums, target-nums[i], i-1)是否为true,若是,将nums[i]置0,返回true
给数组排序,从大到小遍历数组,每轮循环有三种情况
1.该数大于target,返回false
2.该数为0,已经分组过的数,继续循环
3.用递归函数找到可以和该数分在一组的其他数
最后判断数组是否全为0并且成功分组的组数n是否为k
若是返回true,否则返回false
代码如下:
class Solution {
public:
int n = 0;
bool recursive(vector<int>& nums, int target, int begin) {
int i;
for(i = begin; i >= 0; i--) {
if(nums[i] == 0) continue;
if(target == nums[i]) {
n++;
nums[i] = 0;
return true;
}
if(recursive(nums, target - nums[i], i-1)) {
nums[i] = 0;
return true;
}
}
return false;
}
bool canPartitionKSubsets(vector<int>& nums, int k) {
sort(nums.begin(), nums.end());
int i, j;
int sum = 0;
for(i = 0; i < nums.size(); i++) {
sum += nums[i];
}
if(sum%k) return false;
int target = sum/k;
for(i = nums.size()-1; i >= 0; i--) {
if(nums[i] > target) return false;
else if(nums[i] == 0) continue;
else recursive(nums, target, i);
}
for(i = 0; i < nums.size(); i++) {
if(nums[i] != 0) return false;
}
return n == k;
}
};
- 698. Partition to K Equal Sum Subsets
- 698. Partition to K Equal Sum Subsets
- 698. Partition to K Equal Sum Subsets
- 698. Partition to K Equal Sum Subsets
- 698. Partition to K Equal Sum Subsets
- 698. Partition to K Equal Sum Subsets
- 698. Partition to K Equal Sum Subsets
- Leetcode | Partition to K Equal Sum Subsets
- [LeetCode] Partition to K Equal Sum Subsets
- Partition to K Equal Sum Subsets
- LWC 54:698. Partition to K Equal Sum Subsets
- 698. Partition to K Equal Sum Subsets(M)
- leetcode 698. Partition to K Equal Sum Subsets
- Leetcode: 698. Partition to K Equal Sum Subsets
- leetcode-698. Partition to K Equal Sum Subsets
- leetcode 698. Partition to K Equal Sum Subsets
- 【第十三周】698. Partition to K Equal Sum Subsets
- subsets/subsets II/Partition Equal Subset Sum/Partition to K Equal Sum Subsets
- 实现真正的1px的边框 border
- HDU题型 参考 选做
- 语义分析之二:地址回填问题的”拉链“式解决方案
- 设计模式六大原则
- 关于Ubuntu的各种不友好
- 698. Partition to K Equal Sum Subsets
- [work]pycharm配置virtual env
- 17.Letter Combinations of a Phone Number
- oracle--5.多行函数
- #快速编写Thrift简单接口
- [React]属性和状态
- Loadrunner12安装教程
- 17.12.10,web学习第二十二天,还有一年,努力吧青年Ajax
- Search Insert Position