簡體   English   中英

為什么[“”]在遞歸中表現不如預期?

[英]Why does [“”] not behave as expected in recursion?

我正在研究一些流行的面試問題,並提出了以下解決方案“計算字符串的所有排列”。

def perm(s):
    if len(s) == 0:
        return ['']
    else:
        l = []
        prev = perm(s[1:])
        for old_str in prev:
            for i in range(len(old_str)):
                new_str = old_str[0:i] + s[0] + old_str[i:]
                l.append(new_str)
        return l

但是,此解決方案在所有輸入上都返回[] 如果我將基本情況下的字符串設為除空字符串以外的任何字符串,則計算將按預期運行。 例如,在基本情況下為“ hi”時, perm('abc')返回

['abchi', 'bachi', 'bcahi', 'bchai', 'acbhi', 'cabhi', 'cbahi', 'cbhai', 'achbi', 'cahbi', 'chabi', 'chbai', 'abhci', 'bahci', 'bhaci', 'bhcai', 'ahbci', 'habci', 'hbaci', 'hbcai', 'ahcbi', 'hacbi', 'hcabi', 'hcbai']

據我所知,該代碼的算法是正確的。 我不確定為什么空字符串不像我預期的那樣運行,而其他字符串卻如此。 我已引用線程以尋求更好的解決方案,但我仍然對為什么線程不起作用感到困惑。

您可能應該為len(s)== 1添加一個特殊情況。

如所寫,遞歸將使用空字符串下降到基本情況,然后prev將為[]。 此后的for循環將永遠不會運行,因為prev為空,因此最終結果也將為空。

暫無
暫無

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

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