博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
边工作边刷题:70天一遍leetcode: day 61-6
阅读量:4500 次
发布时间:2019-06-08

本文共 1365 字,大约阅读时间需要 4 分钟。

Different Ways to Add Parentheses

要点:这题是另一种递归方式:分治,进一步说是catalan number方式的分治。比较有意思的是和Remove Invalid Parentheses这题的对比,remove里是从左到右递归。首先这题肯定不能这样递归,因为没法同步计算结果。另外,这题的特点是分治的两边是isolate的,意思就是两边加了括号,而每一个做中心的情况都延伸到边界,所以彼此也是isolate的。remove是基于每个存在的括号的,这个没法作为中心点。其他要点:

  • 如何区分算符和数字?分割点只在算符,如果loop以后没有算符,那么substring是一个数,只有最深层会只返回这个数(类似于表达式可以用二叉树来表示,只有leaf是数)。所以是通过结果集来确定的
  • 注意recursion function返回的是所有可能组合的结果,所以是list
class Solution(object):    def diffWaysToCompute(self, input):        """        :type input: str        :rtype: List[int]        """        def diffWays(input):            res = []            for i in xrange(len(input)):                if input[i] in '+-*/':                    left = diffWays(input[:i])                    right = diffWays(input[i+1:])                    for l in left:                        for r in right:                            if input[i]=='+':                                res.append(l+r)                            if input[i]=='-':                                res.append(l-r)                            if input[i]=='*':                                res.append(l*r)                            if input[i]=='/':                                res.append(l/r)            if not res:                res.append(int(input))            return res                return diffWays(input)

转载于:https://www.cnblogs.com/absolute/p/5690339.html

你可能感兴趣的文章
iOS 相关博客清单
查看>>
GLSL新手上路 -- 《交互式计算机图形学》附录中GLSL代码有误 -- 修改如下
查看>>
xss挑战赛小记 0x02(prompt(1))
查看>>
软件工程 第四课(毕业论文管理系统——面向对象)
查看>>
springboot 获取post请求参数
查看>>
Netty4/Android6 SSL双向认证 攻略 2016.10.13
查看>>
webpack的在开发生产时的具体功能
查看>>
平衡二叉树
查看>>
Web 应用
查看>>
KAFKA跨主机部署网络不通解决思路
查看>>
适配器模式--Adapter Pattern
查看>>
linux 安装jdk
查看>>
2017最新PHP初级经典面试题目汇总(下篇)
查看>>
django模板之forloop
查看>>
Object.keys方法之详解
查看>>
网络实验 05-快速生成树配置
查看>>
c#的托管代码和非托管代码的理解
查看>>
CSS3之盒模型
查看>>
apk分析 1
查看>>
第二十一篇 json,picklz,xml模块
查看>>