【Leetcode】【python】Combination Sum
来源:互联网 发布:poe交换机端口不供电 编辑:程序博客网 时间:2024/06/01 14:19
题目大意
在一个集合(没有重复数字)中找到和为特定值的所有组合。
注意点:
所有数字都是正数
组合中的数字要按照从小到大的顺序
原集合中的数字可以出现重复多次
结果集中不能够有重复的组合
虽然是集合,但传入的参数类型是列表
解题思路
回溯,答案代码是从小到大,我一开始的思路是从大到小,然后就递归次数过多…..
代码
从小到大,将candidates的数字逐步加入,一旦超过target就将candidates切片后再加
class Solution(object): def combinationSum(self, candidates, target): """ :type candidates: List[int] :type target: int :rtype: List[List[int]] """ if not candidates: return [] candidates.sort() result = [] self.combination(candidates, target, [], result) return result def combination(self, candidates, target, current, result): print 'candidates', candidates if current: print 'current:', current s = sum(current) else: s = 0 if s > target: return # 从这里结束匹配不了的循环 elif s == target: print 'result:', current result.append(current) return else: for i, v in enumerate(candidates): print i, v self.combination(candidates[i:], target, current + [v], result)
总结
这是我已开始写的,最后报错是:
Line 15: RuntimeError: maximum recursion depth exceeded
在数据集:
[92,71,89,74,102,91,70,119,86,116,114,106,80,81,115,99,117,93,76,77,111,110,75,104,95,112,94,73]310
说明前面的数据集对了,我觉得写的应该没问题了,应该是递归次数过多的问题,有空看下。
class Solution(object): result_list = [] def combine(self, i, temp, target, candidates): # print 'start:', temp if i >= 0: temp.append(candidates[i]) print temp, 'this:', candidates[i], 'sum:', sum(temp) if sum(temp) == target: self.result_list.append(temp) return self.combine(candidates.index(temp[0])-1, [], target, candidates) elif sum(temp) > target: temp.pop() return self.combine(i-1, temp, target, candidates) else: return self.combine(i, temp, target, candidates) else: # print(temp) if temp == []: return cut = candidates.index(temp[-1]) - 1 # print 'daodi', cut temp.pop() return self.combine(cut, temp, target, candidates) def combinationSum(self, candidates, target): """ :type candidates: List[int] :type target: int :rtype: List[List[int]] """ i = len(candidates) - 1 candidates.sort() self.combine(i, [], target, candidates) return self.result_list
阅读全文
0 0
- 【Leetcode】【python】Combination Sum
- 【LeetCode with Python】 Combination Sum
- 【Leetcode】【python】Combination Sum II
- 【LeetCode with Python】 Combination Sum II
- 【LEETCODE】216-Combination Sum III [Python]
- 【LEETCODE】377- Combination Sum IV [Python]
- [LeetCode] Combination Sum、Combination Sum II
- 【LeetCode】Combination Sum && Combination Sum II
- leetcode之Combination Sum && Combination Sum II
- leetcode Combination Sum &Combination Sum II
- leetcode-combination sum and combination sum II
- Leetcode:Combination Sum与Combination Sum II
- leetcode Combination Sum VS Combination Sum II
- [Leetcode]Combination Sum &&Combination Sum II
- LeetCode Combination Sum & Combination Sum II
- leetcode | Combination Sum & Combination Sum 2
- LeetCode: Combination Sum
- LeetCode: Combination Sum II
- 树莓派kali linux安装mariadb
- windows控制虚拟机linux
- JS——计时器
- html如何让table表格垂直(上下)居中
- Javascript异步编程(一: 基础用法)
- 【Leetcode】【python】Combination Sum
- SpringMvc基础入门使用
- 在裸机上在bios中断向量表中,汇编设置增加中断服务程序(向量地址设置三种方式)
- 当我们试图复制一个复杂值的时候
- 最小二乘法python实现
- Android的数据储存——1
- static和extern关键字介绍
- 那些年,Github上的干货!
- 笔试题:2017.9.10爱奇艺校招编程题【平方串】解题思路