zoukankan      html  css  js  c++  java
  • 递归之找数

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

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

  • 相关阅读:
    Daily Scrumming 2015.10.20(Day 1)
    Buaaclubs项目介绍
    [转载] Linux创建用户后,切换用户报This account is currently not available
    NetFPGA-1G-CML从零开始环境配置
    Digilent Xilinx USB Jtag cable
    OVS流表table之间的跳转
    Linux换源
    Scapy安装以及简单使用
    Do in SDN
    KMP算法
  • 原文地址:https://www.cnblogs.com/zengmu/p/12936952.html
Copyright © 2011-2022 走看看