“123456789”在这一字符串里面,任意位置添加“+”,“-”,“*”,“/”运算符,使得字符串表达式的值为50,输出所有可能的结果
- 枚举,有多少种可能?开始算不出-----但是看到网上说任意位置指定的运算符 还要加上一个 “”空字符,然后就感觉---这想法真的是6,那么就是在1-9中间插位(8个间位)每个间位是5种可能---------5**8 = 390625种可能。。
-
- 最无脑的写法就是写八个循环,然后判断表达式的值
- 递归写法,代码虽然讲究简洁,但是也应该满足易懂性。。。
1 def get_res(op : list, res_list, tmps, s : str,): 2 3 if not s: 5 if eval(tmps) == 50: 6 res_lis.append(tmps) 7 return 8 for i in op: 9 # if len(s) >= 1: 感觉判断也是一个开销 既然知道会出现索引越界的问题 还不如直接 用异常捕获的好 10 # get_res(op, res_lis, tmps + i + s[0], s[1:]) 11 try: 12 get_res(op, res_lis, tmps+i+s[0], s[1:]) 13 except IndexError as e: 14 continue 15 16 17 if __name__ == '__main__': 18 19 s = "123456789" 20 op = ["+", "-", "*", "/", ""] 21 res_lis = [] 22 tmps = "1" 23 get_res(op, res_lis, tmps, s[1:])
这个空字符的想法真的太到位....但是我觉得用枚举是个憨憨办法,但是又没能设计一个好的数据结构去处理。对于这个树优化还可以从剪枝方面考虑。。但是实际,进行判断的话,时间还不如直接递归。。。
-