为了账号安全,请及时绑定邮箱和手机立即绑定

怎么解决这个Python递归啊,它用的根本就不是同一内存地址啊!

怎么解决这个Python递归啊,它用的根本就不是同一内存地址啊!

AIxer 2017-08-07 10:16:15
''' 简单描述下原问题:将字符串内所有括号里的内容顺序倒置 举几个例子:          s = 'a(bc)d'         Output should be : 'acbd'                  s = 'a(bc)(de)f'         Output : 'a cb ed f'                  s = 'a(bc(de))f'         Output : a decb f ‘’‘ # 问题是 当第一次使用该函数时,运行这条语句时 # for idx, each in enumerate(string): # Alas!  # 这个 string 在递归返回时,最外层的 string 它仍旧不变,整个过程都是原始输入 # 因此它就继续循环,所以仍然可以找到 '(' 或 ')' 也因此得不到正确结果了 # 这也是和C语言不一样的地方 # 当然使用正则表达式也可以轻松解决,但这样就不可以么?我的水平还不够,希望大家能帮个忙, 谢谢! # 我考虑过引入一个变量,但不好跟踪判断 # 代码如下: def findrb(string): # 找右括号     for idx, each in enumerate(string): # Alas!          if each == ')':             string[:idx + 1] = string[:idx][::-1]             break         elif each == '(':             string = string[:idx] + findrb(string[idx + 1:])     return (string) def Main():     s = 'a(bc)d'     nsl = list(s)     print(''.join(findrb(nsl))) if __name__ == "__main__":     Main()
查看完整描述

6 回答

?
AIxer

TA贡献22条经验 获得超13个赞

呃,findrb() 这个函数不是严格的递归吧~, 好吧, 该问题已经解决,我发现了另一种递归方案

查看完整回答
反对 回复 2017-08-07
?
AIxer

TA贡献22条经验 获得超13个赞

呃, 如果每次递归返回时都顺带着返回一个 ' ) ' 的 idx 值, 然后再在上一层加上这个 idx 值以定位到 

' ) ' , 再用 del 语句把它删了,似乎也是可行的 ?

查看完整回答
反对 回复 2017-08-07
  • 6 回答
  • 1 关注
  • 2196 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信