繁体   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