当时有点想用这个的想法,但是一直在那死解回溯计算,还是没做出来,叹气。
配合eval()函数秒解,现在巨后悔为什么不尝试一下。
题目描述:
输入一个括号序列(())()。
单独成对的括号()则表示为整数2。
(())则表示(2),如果外层还有一个括号则将内部的数字加一,所以(2) 得到3。
如果两个标准括号相连,例如()(), 则表示2*2 = 4。
输入'(())()' --> (2+1)*2 = 6 输入 '(()())(())' -->(1+2*2)*(2+1) = 15
把括号序列直接转化为其要求的str表达式,然后用eval函数直接出结果:
代码如下:
import re a = input() b = re.sub('\(\)', '(2)', a) while True: tmp = re.sub('\)\)', ')+1)', b) #由于替代))的时候只能替代某些部分 但是我们需要全部转换完毕 if tmp == b: break else: b = tmp b = re.sub('\)\(', ')*(', b) res = eval(b) print(res)
测试输入输出:
'(())()' --> '((2)+1)*(2)' --> 6 '(()())(())' --> '((2)*(2)+1)*((2)+1)' --> 15
觉得有趣就点个赞吧!
全部评论
(3) 回帖