簡體   English   中英

Python 中的數字組合(硬幣變化變化)

[英]Number combinations in Python (coin change variation)

我正在嘗試從提供的值列表中獲取所有可能的唯一組合的列表,這些值的總和導致還提供的目標值。 我是一個初學者,並且已經看過一些關於硬幣找零問題的內容,但是,這有些不同,因為我並沒有試圖獲得最少的元素數量。 我嘗試了很多方法,因為遞歸對我來說非常新而且很難,我想出了這段代碼,在我增加遞歸限制后停止給我一個遞歸錯誤,但它每次只給出一個組合

from random import choice as pick
import sys

sys.setrecursionlimit(5000)


def find_combinations(elements, target, partial=None, results=None):
    if results is None:
        results = []
    if partial is None:
        partial = []

    if len(results) == 2:
        return results
        
    else:
        rand_num = pick(elements)
        if partial.count(rand_num) < elements.count(rand_num):
            partial.append(rand_num)
        total = sum(partial)
        if total == target:
            if partial not in results:
                results.append(partial)
                print(results)
            partial.clear()
            find_combinations(elements, target, partial, results)
        elif total > target:
            partial.clear()
            find_combinations(elements, target, partial, results)
        elif total < target:
            find_combinations(elements, target, partial, results)

如您所見, len 是任意的。 我似乎無法擺脫遞歸。任何解決方案都會受到贊賞:)

import itertools

stuff = [1, 2, 3]
Target = 3
for L in range(0, len(stuff)+1):
    for subset in itertools.combinations(stuff, L):
        if sum(subset) == Target:
            print(subset)

您可以使用itertools循環遍歷每個組合,如果該子集的總和等於您在此處執行的任何操作的目標,我將其打印出來,即 output:

(3,)
(1, 2)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM