您的位置:首页 > 其它

698[Medium]: Partition to K Equal Sum Subsets

2018-01-09 21:21 447 查看

Part1:题目描述

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.

Example 1:

Input: nums = [4, 3, 2, 3, 5, 2, 1], k = 4
Output: True
Explanation: It's possible to divide it into 4 subsets (5), (1, 4), (2,3), (2,3) with equal sums.


Note:

1 <= k <= len(nums) <= 16
.
0 < nums[i] < 10000
.

Part2:解题思路

  这一题我觉得对我来说还是挺难的,借鉴了leetcode上面的解法才得以解决,要再更深入的理解才行

Part3:代码

class Solution {
public:
bool search(vector<int>groups, int row, vector<int>& nums, int target) {

if (row < 0) return true;
// 执行完这一句之后row的值才会变
int v = nums[row--];
for (int i = 0; i < groups.size(); i++) {
if (groups[i] + v <= target) {
groups[i] += v;
if (search(groups, row, nums, target)) return true;
groups[i] -= v;
}
if (groups[i] == 0) break;
}
return false;
}

bool canPartitionKSubsets(vector<int>& nums, int k) {
int length = nums.size();
int sum = 0;
for (int i = 0; i < length; i++) {
sum += nums[i];
}
if ((sum % k) != 0) return false;
int target = sum / k;
sort(nums.begin(), nums.end());

int row = length - 1;
if(nums[row] > target) return false;
while (row >= 0 && nums[row] == target) {
row--;
k--;
}
return search(vector<int>(k), row, nums, target);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  动态规划