簡體   English   中英

二進制字符串的遞歸問題(Python)

[英]Recursive problem on binary strings (Python)

我遇到這個python問題的問題; 在過去的一個小時中,我一直在努力,但我完全陷入困境。.我對遞歸仍然不太滿意,問題也越來越難解決,因此非常感謝任何幫助!

問題很簡單,我需要編寫一個將n和w作為輸入的函數; 其中n是位字符串的大小,w是字符串中的個數。 輸出應該是其所有排列。

例:

n = 3,w = 1:['001','010','100']

n = 4,w = 2:['0011','0101','0110','1001','1010','1100']

到目前為止,這是我寫的內容,但是我對其進行了調整或在python visualizer中運行,但我仍然無法弄清楚:

def genBinStr2(n,w):
    if n <=0 or w <= 0 :
        return [""]
    X = genBinStr2(n-1,w)
    Y = genBinStr2(n-1,w-1)
    M = []
    for s in X:
        M.append("0"+s)
    for m in Y:
        M.append("1"+s)
    return M
print (genBinStr2(3,1))

輸出為:

runfile('/Users/Rayan/Desktop/AUB Spring 2019/EECE 230 /Revision/untitled0.py', wdir='/Users/Rayan/Desktop/AUB Spring 2019/EECE 230 /Revision')
['000', '001', '011', '111']

再次感謝您的幫助! 我真的很想解決這個問題

謝謝!!

您的開幕詞不允許w = 0的情況。

例如:print(genBinStr2(3,0))將返回['']而不是[“ 000”]

還存在一個返回結果的問題,其中1的數目小於w

這是我使用遞歸解決問題的方法:

def genBinStr2(n,w):
    if n == 1:
        if w == 1:
            return["1"]
        if w == 0:
            return["0"]
    if n <= 0 or w < 0:
        return [""]
    X = genBinStr2(n-1,w)
    Y = genBinStr2(n-1,w-1)
    M = []
    if w < n:
        for s in X:
            M.append("0"+s)
    if w >=1:
        for m in Y:
            M.append("1"+m)
    return M

輸出:

>>> print (genBinStr2(3,2))
['011', '101', '110']
>>> print (genBinStr2(3,1))
['001', '010', '100']
>>> print (genBinStr2(4,3))
['0111', '1011', '1101', '1110']

如果您不介意不使用遞歸,請使用itertools解決方案

from itertools import combinations

def ones(n, w):
    combos = [dict.fromkeys(x, "1") for x in combinations(range(n), w)]
    return ["".join([x.get(i, "0") for i in range(n)]) for x in combos]

ones(4, 2)

輸出:

['1100', '1010', '1001', '0110', '0101', '0011']

暫無
暫無

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

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