递归之找数

“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:])

        这个空字符的想法真的太到位....但是我觉得用枚举是个憨憨办法,但是又没能设计一个好的数据结构去处理。对于这个树优化还可以从剪枝方面考虑。。但是实际,进行判断的话,时间还不如直接递归。。。

posted @ 2020-05-22 14:30  ZMZ沐梓  阅读(153)  评论(0编辑  收藏  举报