当前位置:   article > 正文

241. 为运算表达式设计优先级【C++/力扣/详解】分治法例题1_c++表达式优先级的试题

c++表达式优先级的试题

题目

在这里插入图片描述

题解

部分内容转载于leetcode-分治-241——为运算表达式设计优先级

  • 这道题是为了巩固算法设计与分析中学到的第一种具体的算法思想,即递归与分治在这里插入图片描述
    递归与分治在这里插入图片描述
    这道题就满足使用条件,这是因为(以下为对转载内容的分析):
    在这里插入图片描述
  • 【divide】对于一个给定的算术表达式a op b,结果就是因为括号顺序的改变而得到的所有不同的a的值和b的值进行op运算所得到的值。比如左边假设可以变化为a1,a2,右侧可以变化为b1,b2,b3,这个时候我们就可以说整个表达式的可能取值就是,a1b1,a1b2,a1b3,a2b1,a2b2,a2b3,这样我们就得到了部分的答案取值。比如我们先看第一组,即乘号作为这个式子的分割,左边的2就是a,右边的(3-45)就是b,因为a和b中我们可以在不同的地方加括号,就会导致a和b的值发生变化,左边只有一个数2,它再怎么加括号,都只能是2了,那么左边就只有一个a1,a1就是2,而右边,就会因为加括号的方式不同,产生不同的结果,在这里插入图片描述
    如图,乘号右边有2种加括号的方式,会有2种不同的结果,于是乘号右边就是有b1,b2这两种取值(我们就认为取值都会不同先不判断),之后整个表达式他问可能结果的组合,其中就会有2种组合,a1
    b1和a1*b2。之后我们就可以把这两种组合得到的结果加进结果数组中。
  • 【conquer】分解成运算符左边和右边之后,我上面是手动计算出来的左边有1种可能,右边有2种可能,但是式子一长,比如右边还有10000个字符的表达式,这怎么办,我手动算不出来,就用计算机的递归,你会发现,这道题的问题是求一个表达式,加不同的括号之后,所能得到的所有的结果是多少,之后返回一个数组。你再看看刚才的分析过程,我们找op右边的b1,b2…的过程,不就是找op这个运算符右边这个子表达式,它加不同的
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/537739
推荐阅读
相关标签
  

闽ICP备14008679号