python - 有没有解决递归问题的好方法?
问题描述
我正在尝试解决这个问题
实现一个函数substring,它接受一个字符串并返回其所有可能的子字符串。如果 (1) 是空字符串,或者 (2) 中的所有字符都以它们的相对左右顺序出现,则字符串是字符串的子字符串。我们假设原始字符串不包含任何重复字符。
例如,
>>>substring('a')
['', 'a']
>>> substring('abc')
['', 'c', 'b', 'bc', 'a', 'ac', 'ab', 'abc']
您必须使用以下代码
def substring(S):
if S ==[]:
else:
我最近才了解递归并尝试使用此代码。
def substring(S):
if S ==[]:
return ['']
else:
return[substring(S[1:])]+[substring(S[0])]
我该如何解决这个问题,我有什么建议可以解决这些类型的问题吗?
更新:阅读评论和答案后,我能得到的答案如下。但是,此代码的基本情况S == ''
不是S == []
问题所要求的。
def substring(S):
if S =='':
return ['']
else:
return substring(S[1:])+[S[0] + i for i in substring(S[1:])]
@Primusa 感谢您的建议!
解决方案
不确定你的任务是什么,但我不建议在这里递归。这是一个简单的代码(另见@chepner 的评论)
S = 'abc'
l = list(S)
result = []
for n in range(2**len(l)):
result.append(''.join([l[i] for i in range(len(l)) if 2**i & n > 0]))
print(result)
推荐阅读
- c++builder - 如何在 Embarcadero C++ Builder 10.1 的调试会话期间恢复执行?
- python - 使用 lxml html.tostring 时保留布尔 HTML 属性的值
- azure - 将 SQL 2016 数据库部署到 Azure SQL 托管实例的可能方法有哪些?
- git - 修复 git merge 后两个分支之间的差异
- c++ - 在数组开头对奇数进行排序
- android - 字符串数组上的按钮单击问题
- sql - Concat ORA-00909: 参数数量无效,TO_DATE 有问题
- laravel - 在服务器上修改 3d 模型
- excel - 总和取决于两个过滤器/切片器
- google-cloud-platform - 如何使用作曲家 DAG 从 GCP 存储桶中递归读取文件名