python练习工具python练习卷菜鸟教程python练习
下载地址 https://share.weiyun.com/OvviwGnZ
资料目录 Python练习集100题 100道Python面试题 Python100经典练习题 Python经典题目100道题 Python题库(已收录100道真题) Python100例视频讲解课程 菜鸟教程Python教程100例 130道python练习题,涵盖基础内容的方方面面 Python考试题复习知识点试卷试题 PYTHON测试题和答案 python第一阶段考试题 Python经典面试题和答案解析 python期末考试复习试卷 python习题集大全(附答案解析) 老男孩Python全栈7期练习题(面试真题模拟) 尚观python第一阶段考试(面试真题模拟) 《Python程序设计基础与应用》习题答案 《Python快速编程入门》——课后题答案 Python编程基础张健 , 张良均课后习题及答案 Python程序设计基础及实践(慕课版)郭炜习题答案 Python程序设计基础习题答案与分析 python基础试题(含答案)
举例 组合总数 题目要求 已知一个无重复元素的序列,给定一个目标数,找出序列中所有可以使数字和未目标数的组合。 序列中的元素可以被多次选用,不能出现重复的组合, 序列中的元素和目标数都是正整数。 例如序列 [2, 3, 5], 目标值为8, 最终的组合有 (2, 3, 3) (3, 5) (2, 2, 2, 2) 思路分析 编程不是拿着画笔随心所欲的在画板上涂抹,也不存在固定的方法帮你完成具体的问题,做练习题的目的是通过这些练习题锻炼你的思维,当你建立起编程的思维以后,你也就不在乎什么具体方法和套路,面对具体问题时,你将有能力进行分析。 当问题复杂无从下手时,你可以从问题的边界处入手,题目没有对组合里的元素个数做限制,那么你就先考虑组合里只有一个元素的情况,题目就变成了从序列中找到1个元素,这个元素的值等于目标元素,这样,问题不就变得简单了么 接下来考虑两个元素的情况,从序列中找到两个数,这两个数的和等于目标数target,先随便从序列中选定一个数,假设这个数是i, 那么接下来要做的就是从序列中找到1个元素且这个元素等于target - i 接下来思考三个元素的情况,从序列中找到三个数,这三个数的和等于目标数target,你可以先随便从序列中选定一个数,假设这个数是i,那么接下来要做的就是从序列中找到两个元素且这两个元素的和等于target - i 新的问题,总是转化为老的问题,而最老的那个问题,从序列中找到一个元素且这个元素的值等于目标值是非常容易解决的。 示例代码 # coding=utf-8
def combination_sum(lst, target): combination_lst = [] for item in lst: if item == target: combination_lst.append([item]) elif item > target: continue # 单个元素都大于target,这个元素放在哪个组合里,组合之和都必然比target大 else: other = target - item res_lst = combination_sum(lst, other) # 新问题转化成老问题 # res_lst 是list, 里面的元素还是list,且和等于other for tmp_lst in res_lst: tmp_lst.append(item) # 加上item后,组合之和等于target combination_lst.extend(res_lst) # 所有组合都放在combination_lst
return combination_lst
def remove_duplicate(lst): combination_set = set() for item in lst: item.sort() # 先排序 combination_set.add(tuple(item)) # list 没有hash值,不能放到set中
return combination_set
if __name__ == '__main__': lst = [2, 3, 5] res_lst = remove_duplicate(combination_sum(lst, 8)) for item in res_lst: print(item)
|