[抄题]:

Given an array of integers nums and a positive integer k, find whether it's possible to divide this array into knon-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.

[暴力解法]:

时间分析:

空间分析:

[优化后]:

时间分析:

空间分析:

[奇葩输出条件]:

[奇葩corner case]:

dfs中的cc是:组数k直接等于1

dfs的退出条件是:cur_sum == target

[思维问题]:

不懂“是否”题为啥要用dfs:这一步能不能、下一步能不能,每个元素都要算到,所以用boolean DFS

[英文数据结构或算法,为什么不用别的数据结构或算法]:

[一句话思路]:

DFS扩展的依据是:下一步没有访问过 visited = f,就设置visited = t &回溯。中间不要直接return,否则后面没法做。

[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

[画图]:

[一刷]:

  1. dfs的target直接写成target就行了,就是个参数

[二刷]:

  1. dfs的start直接写成start就行了,就是个参数 traverse中要变成i + 1

[三刷]:

找到k组之后,继续找k - 1 组,变量变化之后就要控制它的最后值 是否为0或1 了

[四刷]:

[五刷]:

[五分钟肉眼debug的结果]:

[总结]:

有变量k的次数递减,就必须写退出条件。DFS最重要的反而是退出条件

[复杂度]:Time complexity: O(n) Space complexity: O()

[算法思想:迭代/递归/分治/贪心]:

[关键模板化代码]:

[其他解法]:

[Follow Up]:

[LC给出的题目变变变]:

[代码风格] :

[是否头一次写此类driver funcion的代码] :

[潜台词] :

class Solution {
public boolean canPartitionKSubsets(int[] nums, int k) {
int sum = 0; //ini: get sum
for (int num : nums) sum += num;
int[] visited = new int[nums.length]; //cc: k == 1
if (k == 1) return true;
if (k <= 0 || sum % k != 0) return false; //canPartition
return canPartition(0, nums, visited, 0, k, sum / k);
} public boolean canPartition(int start, int[] nums, int[] visited, int curSum, int k, int target) {
if(k==1) return true; //exit :curSum == target
if (curSum == target) return canPartition(0, nums, visited, 0, k - 1, target); //backtracing
for (int i = start; i < nums.length; i++) {
if (visited[i] == 0) {
visited[i] = 1;
//do not return directly
if(canPartition(i + 1, nums, visited, curSum + nums[i], k, target)) return true;
visited[i] = 0;
}
} return false;
}
}

698. Partition to K Equal Sum Subsets 数组分成和相同的k组的更多相关文章

  1. 【LeetCode】698. Partition to K Equal Sum Subsets 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 回溯法 日期 题目地址:https://leetco ...

  2. 698. Partition to K Equal Sum Subsets

    Given an array of integers nums and a positive integer k, find whether it's possible to divide this ...

  3. [LeetCode] 698. Partition to K Equal Sum Subsets

    Problem Given an array of integers nums and a positive integer k, find whether it's possible to divi ...

  4. 【leetcode】698. Partition to K Equal Sum Subsets

    题目如下: 解题思路:本题是[leetcode]473. Matchsticks to Square的姊妹篇,唯一的区别是[leetcode]473. Matchsticks to Square指定了 ...

  5. [LeetCode] Partition to K Equal Sum Subsets 分割K个等和的子集

    Given an array of integers nums and a positive integer k, find whether it's possible to divide this ...

  6. [Swift]LeetCode698. 划分为k个相等的子集 | Partition to K Equal Sum Subsets

    Given an array of integers nums and a positive integer k, find whether it's possible to divide this ...

  7. LeetCode Partition to K Equal Sum Subsets

    原题链接在这里:https://leetcode.com/problems/partition-to-k-equal-sum-subsets/description/ 题目: Given an arr ...

  8. Partition to K Equal Sum Subsets

    Given an array of integers nums and a positive integer k, find whether it's possible to divide this ...

  9. [LeetCode] Split Array with Equal Sum 分割数组成和相同的子数组

    Given an array with n integers, you need to find if there are triplets (i, j, k) which satisfies fol ...

随机推荐

  1. pam模块初探

  2. torchvision里densenet代码分析

    #densenet原文地址 https://arxiv.org/abs/1608.06993 #densenet介绍 https://blog.csdn.net/zchang81/article/de ...

  3. laravel 路由分組

    laravel 路由分組 Route::group(['prefix' => 'admin'], function () { $namespacePrefix="\\App\\Http ...

  4. 1.2 VMware安装过程

    1.新建虚拟机后,选择[我以后再安装],否则安装过程看不到. 2.在虚拟机设置里,内存设置不能超过物理内存的一半. 3.创建硬盘 4.设置CD/ROM使用ISO镜像文件 5.创建[快照] 6.克隆虚拟 ...

  5. 十五、springcloud(一)注册中心Eureka

    1.Eureka的基本架构 a.Eureka Server 提供服务注册和发现 b.Service Provider 服务提供方 将自身服务注册到Eureka,从而使服务消费方能够找到 c.Servi ...

  6. java工程师-面试知识点总结

    目录(转载) [x] 一.Java基础(语言.集合框架.OOP.设计模式等) [x] 二.Java高级(JavaEE.框架.服务器.工具等) [x] 三.多线程和并发 [x] 四.Java虚拟机 [x ...

  7. xtrabackup的执行过程

    XtraBackup的执行过程 执行全量备份过程中对数据库进行的操作https://www.cnblogs.com/digdeep/p/4946230.html 可以看出执行xtrabackup进行全 ...

  8. 滑雪(dp)

    问题 H: [例9.24]滑雪 时间限制: 1 Sec  内存限制: 128 MB提交: 21  解决: 13 题目描述 小明喜欢滑雪,因为滑雪的确很刺激,可是为了获得速度,滑的区域必须向下倾斜,当小 ...

  9. python数据格式化之pprint

    python数据格式化之pprint 2017年06月17日 13:56:33 阅读数:2291 简介 pprint模块 提供了打印出任何Python数据结构类和方法. 模块方法: 1.class p ...

  10. CentOS7 安装kafka集群

    1. 环境准备 JDK1.8 ZooKeeper集群(参见本人博文) Scala2.12(如果需要做scala开发的话,安装方法参见本人博文) 本次安装的kafka和zookeeper集群在同一套物理 ...