type none struct{} func canPartitionKSubsets(nums []int, k int) bool { sum := 0 for _, i := range nums { sum += i } if sum%k != 0 { return false } sum /= k sort.Sort(sort.Reverse(sort.IntSlice(nums))) // Sort the nums to avoid TLE (or use memorized search) return dfs(nums, k, sum, 0, 0) } func dfs(nums []int, k, sum, cur, set int) bool { if k == 0 { return set == 1<>uint(i)&1 == 1 { continue } t := cur + nums[i] if sum < t { break } nset := set | (1 << uint(i)) if t < sum { if dfs(nums, k, sum, t, nset) { return true } } else if dfs(nums, k-1, sum, 0, nset) { return true } } return false }