[Leetcode][python]Combinations/组合 墨蓝 2022-06-07 11:42 186阅读 0赞 ## 题目大意 ## 求在1到n个数中挑选k个数的所有的组合类型。 ## 解题思路 ## DFS(回溯法) ## 代码 ## ### DFS ### 和排列蛮像的,只不过到了k个数就停止递归了 class Solution(object): def combine(self, n, k): """ :type n: int :type k: int :rtype: List[List[int]] """ def dfs(start, valuelist): if self.count == k: ret.append(valuelist) return for i in range(start, n + 1): self.count += 1 dfs(i + 1, valuelist + [i]) self.count -= 1 ret = [] self.count = 0 dfs(1, []) return ret ### 直接用数字做 ### 看图,摆明了不让我们这么做么,这最后一个数据集坑死了多少人。 ![这里写图片描述][SouthEast] class Solution(object): def combine(self, n, k): """ :type n: int :type k: int :rtype: List[List[int]] """ self.result = [] temp = [] self.combineHelper(n, k, 0, 1, temp) return self.result def combineHelper(self, n, k, length, num_now, temp): # print 'start', temp, list_num, length, self.k if length == k: # print 'add', temp self.result.append(temp[:]) # 这里直接写temp,就会导致result内的temp永远是一个实例,后面修改temp会使得result一直在变化 # print 'result', self.result return for i in range(num_now, n+1): temp.append(i) self.combineHelper(n, k, length+1, i+1, temp) temp.pop() ### 转为list做 ### **最后一个测试集TLE** class Solution(object): def combine(self, n, k): """ :type n: int :type k: int :rtype: List[List[int]] """ self.k = k self.result = [] list_num = [i for i in range(1, n+1)] self.combineHelper(0, [], list_num) return self.result def combineHelper(self, length, temp, list_num): # print 'start', temp, list_num, length, self.k if length == self.k: # print 'add', temp self.result.append(temp[:]) # 这里直接写temp,就会导致result内的temp永远是一个实例,后面修改temp会使得result一直在变化 # print 'result', self.result return for i, num in enumerate(list_num): temp.append(num) # print temp, list_num[i+1:] # print '-------' self.combineHelper(length+1, temp, list_num[i+1:]) temp.pop() ## 总结 ## 做DFS时,有很多小细节,比如该题,temp需要pop,不能在上面加入result那里做,应该是在调用递归后做。 此题肯定有非递归写法,有空琢磨。 [SouthEast]: /images/20220607/4ede99b3402241ec9f9352164e4abba7.png
相关 组合数 组合数 时间限制: 3000 ms | 内存限制: 65535 KB 难度: 3 描述 找出从自然数1、2、... 、n(0<n<10)中任取r(0<r<=n) Love The Way You Lie/ 2022年08月05日 07:26/ 0 赞/ 204 阅读
相关 组合数 组合数 时间限制: 3000 ms | 内存限制: 65535 KB 难度: 3 描述 找出从自然数1、2、... 、n(0<n<10)中任取r(0<r<=n) 怼烎@/ 2022年07月12日 13:14/ 0 赞/ 211 阅读
相关 组合模式 在我写外观模式的时候,我是举最近在做的一个考勤的例子,不熟悉的小伙伴可以去看一下前面的文章哦,在那个例子中我们分析了一下,考勤中每种类别员工的工作日计算方式是不一样的,比如说一 川长思鸟来/ 2022年05月09日 15:00/ 0 赞/ 215 阅读
相关 组合模式 组合模式 一、概述 1. 组合模式为处理树形结构提供了完美的解决方案,描述了如何将容器和叶子进行递归组 合,使得用户在使用时可以一致性的对待容器和叶子。 2. 古城微笑少年丶/ 2022年04月18日 04:47/ 0 赞/ 191 阅读
相关 组合数学 (二): 排列组合 排列组合 公式 排列 组合 代码 输出所有排列 错位排列 输出所有组合 公式 排列 从 本是古典 何须时尚/ 2022年02月21日 14:54/ 0 赞/ 329 阅读
相关 组合模式 > 本文总结摘自刘伟老师的《设计模式》和程杰老师的《大话设计模式》 1.定义 组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个 朴灿烈づ我的快乐病毒、/ 2022年01月23日 00:21/ 0 赞/ 236 阅读
相关 组合模式 前言 组合模式(Composite),将对象组合树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 一、Compone 傷城~/ 2021年12月09日 00:49/ 0 赞/ 278 阅读
相关 组合 与全排列实现方式有异曲同工之处。 代码如下: import java.util.ArrayList; import java.util.List; 我就是我/ 2021年09月26日 15:16/ 0 赞/ 305 阅读
相关 组合模式 11.组合模式 ![70][] //抽象构件,它是叶子和容器共同的父类,并且声明了叶子和容器的所有方法 abstract class Abstr 末蓝、/ 2021年09月16日 23:58/ 0 赞/ 348 阅读
相关 组合模式 合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类... 小灰灰/ 2020年06月13日 05:57/ 0 赞/ 790 阅读
还没有评论,来说两句吧...