Combinations
来源:互联网 发布:最近网络流行歌曲2017 编辑:程序博客网 时间:2024/04/29 23:57
leetcode第77题,排列组合题升级版,这个题的总体难度不太大,但是鉴于使用的是python,如果不剪枝,就一定会超时。
首先分析问题,先要按顺序挑选出开头的元素,此时所给集合中的所有元素均可以添加,然后把加上了开头元素的列表向下递归,添加第二个元素,第二个元素的要求应该是第一个元素之后的所有元素均可,同时记录递归层级的变量level自增。递归的出口条件是,当level达到了指定的个数后,数名数字添加完毕,则可以加入最终的结果列表中。
如果单纯这样写结果正确,但是大数据会TLE,于是参考别人的剪枝方法,那就是在递归添加元素的过程中,如果发现所剩的元素根本不够,即使全部用掉也凑不够k个,这样的循环就可以提前终止了。这个剪枝卡了我很久,不加这个就会超时。
class Solution(object): def combine(self, n, k): """ :type n: int :type k: int :rtype: List[List[int]] """ ans = [] def dfs(subList,start,level): if level == k: ans.append(subList) return for i in xrange(start,n+1): if n-i < k-level-1 :break dfs(subList+[i],i+1,level+1) dfs([],1,0) return ans
0 0
- Combinations
- Combinations
- Combinations
- Combinations
- Combinations
- Combinations
- Combinations
- Combinations
- Combinations
- Combinations
- Combinations
- Combinations
- Combinations
- combinations
- Combinations
- Combinations
- Combinations
- Combinations
- android开发 Activity跳转Fragment黑屏
- Eclipse clean作用
- 多线程文件断点续传
- 第三次编程作业
- HTTP初探
- Combinations
- java线程——Atomic(原子的)
- UISwipeGestureRecognizer滑动手势
- AIDL进阶
- Matrix Chain Multiple
- 内嵌子对象
- Java之Array相关
- (LeetCode)Valid Anagram --- 有效的混排字符串
- Android插件化开发