JAVA程序设计:划分为k个相等的子集(LeetCode:698)

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

思路:递归搞一搞,我们应该对穷举搜索进行优化,利用状态压缩避免不必要的递归,除此之外,我们希望通过某种顺序使用nums数组,使得按照该顺序进行划分是有效的。

class Solution {
	
	enum Result{TRUE,FALSE}
	
    public boolean canPartitionKSubsets(int[] nums, int k) {
        
    	int sum=0;
    	for(int i=0;isum)
    			return false;
    	
    	int len=1<>i)&1)==0 && nums[i]<=tar) {
    				if(search(used|(1<

 

你可能感兴趣的:(JAVA程序设计:划分为k个相等的子集(LeetCode:698))