# 0698. Partition to K Equal Sum Subsets ###### tags: `Leetcode` `Medium` `Backtracking` `FaceBook` Link: https://leetcode.com/problems/partition-to-k-equal-sum-subsets/ ## 思路 [0416. Partition Equal Subset Sum](https://hackmd.io/18plVWdQSjutpHD_ownwSg)的进阶版 用visited记录每条路上之前用了哪些数 用Line 17里的```currSum+nums[i]<=target```剪枝 加了之后速度显著提升 时间复杂度计算:不考虑剪枝的情况 相当于对于nums里面的每个数字都考虑一遍它是否会出现在每个subset里面(一共k个) **backtracking的时间复杂度一般都是排列组合,且不考虑剪枝** ## Code ```java= class Solution { public boolean canPartitionKSubsets(int[] nums, int k) { int sum = 0; for(int num:nums){ sum += num; } if(k==1) return true; if(k > nums.length) return false; if(sum%k != 0) return false; boolean[] visited = new boolean[nums.length]; return backtracking(nums, k, sum/k, 0, 0, visited); } public boolean backtracking(int[] nums, int k, int target, int currSum, int startIdx, boolean[] visited){ if(k==0) return true; if(currSum == target) return backtracking(nums, k-1, target, 0, 0, visited); for(int i = startIdx;i < nums.length;i++){ if(!visited[i] && currSum+nums[i]<=target){ visited[i] = true; if(backtracking(nums, k, target, currSum+nums[i], i+1, visited)) return true; visited[i] = false; } } return false; } } ```