假设我们有一个列表和目标:
list:[1,2,3,4,5]
和target:20
我们想要找到总的组合来达到这个,通过乘法,这是:[1,4,5]
、[4,5]
、[2,5,2]
、[1,2,2,5]
我做了这个代码,但我似乎不知道如何删除这些代码,所以我也有它们,我的意思是我收到:[1,4,5]
、[1,2,2,5]
但如果没有[1]
,我似乎无法获得它,我试着"欺骗;以某种方式得到它,但我不能,因为我的代码不适合它…
def Coin(target, lst, temp=[], comb=[]):
if target == 1:
comb.append(temp)
return comb
if len(lst) == 0:
return []
if target >= lst[0]:
if lst[0] > 1:
take=Coin(target/lst[0],lst,temp+[lst[0]],comb)
dont_take=Coin(target,lst[1:],temp,comb)
else:
take_1 = Coin(target, lst[1:], temp + [1], comb)
return take_1
return take
return comb
print(Coin(20, [1,2,3,4,5], [], []))
[[1, 2, 2, 5], [1, 4, 5]]
如何添加没有1的零件?我不需要解决方案,因为正如所说,不是家庭作业,而是考试练习。只要一条线索就足够了,我想自己找到它,但我需要一条线索。
也许你应该合并
if lst[0] > 1:
else:
总之,这意味着对于1,我们也应该决定是否接受它。
使用yield
的生成器要比使用return
的函数容易得多。
不同的是,您只能return
一次,而您可以yield
任意次数(如果没有解决方案,则包括0(。
如果您希望返回list
,您仍然可以,如下所示:
def coin (target, lst):
return list(_coin(target, lst, 0)
def _coin (target, lst, i):
...
如果这无关紧要,生成器不必一次生成整个列表,从而节省内存。而你只是:
def coin (target, lst, i=0):
... # Use yield as often as you want, all will be returned.
其次,您遇到了Python中最常见的问题。您使用可变对象作为默认对象。如果你要继续你目前的方法,你需要:
def coin(target, lst, temp=None, comb=None):
if temp is None:
temp = []
if comb is None:
comb = []
...
第三,你应该养成遵循标准风格惯例的习惯。从很多方面来说,公约是什么并不重要。但是,每个人都在同一页上,确实。因此,您应该尽量遵循最常见的Python约定。其中函数应命名为coin
而不是Coin
。
编辑:这个问题的规则是:
-
仅限正整数(不允许为0(。
-
数字只能出现一次(在输入时(。
-
不能重复列表中的数字。EG:[1,2,4],n=12>gt;[1,12],[12,1],[3,4],[2,6],[1,3,4],[1,2,6]
非:[1,2,2,3],[2,2,3] -
我就这么想。
def coin_change_MULTI(num, lst): if num == 1 and 1 not in lst: return [] return Coin_MULTI(num, sorted(lst), [], []) def Coin_MULTI(target, lst, temp=[], comb=[]): if target == 1: if big_than_target(1, lst): return [[1]] comb.append(temp) return comb if len(lst) == 0: return [] if target >= lst[0]: if lst[0] > 1: take=Coin_MULTI(target/lst[0],lst[1:],temp+[lst[0]],comb) dont_take=Coin_MULTI(target,lst[1:],temp,comb) return comb else: take_1 = Coin_MULTI(target, lst[1:], temp + [1], comb) dont_take_1 = Coin_MULTI(target, lst[1:], temp, comb) return comb return take + dont_take return comb print(coin_change_MULTI(12, [2,4,6,12,7,3, 1])) print(coin_change_MULTI(1, [2,4,6,12,7,3,1])) print(coin_change_MULTI(1, [2,4,6,12,7,3])) print(coin_change_MULTI(100, [2,4,6,12,7,3,1])) print(coin_change_MULTI(576, [2,4,6,12,7,3,1])) print(coin_change_MULTI(12096, [2,4,6,12,7,3,1])) print(coin_change_MULTI(0, [2,4,6,12,7,3,1])) print((coin_change_MULTI(24, [2,4,6,12,7,3,1]))) [[1, 2, 6], [1, 3, 4], [1, 12], [2, 6], [3, 4], [12]] [[1]] [] [] [[1, 2, 4, 6, 12], [2, 4, 6, 12]] [[1, 2, 3, 4, 6, 7, 12], [2, 3, 4, 6, 7, 12]] [] [[1, 2, 3, 4], [1, 2, 12], [1, 4, 6], [2, 3, 4], [2, 12], [4, 6]]
进程结束,退出代码为0