本文共 673 字,大约阅读时间需要 2 分钟。
24 点游戏是一个很有意思的数字游戏,也是一道常见的算法面试题。题目是这样的:任给四个数(为了便于人们心算或口算,一般都是小于 10 的数),对四个数字用各种组合进行加、减、乘、除四则运算,看看结果是否能等于 24?对于面试题来说,这是一个典型的穷举类型算法问题。这个题目比较有意思的地方是它除了要对数字组合进行枚举,还要对四个运算符进行组合。这一课我们要介绍的方法有点特殊,它没有简单地使用穷举遍历,而是采用穷举法和分治法相结合的方法来解决这个问题,这种方法比数字 + 运算符一起枚举的方法简单,容易理解,整个算法只有大约 40 行有效代码,其中主体部分有效代码只有不到 20 行,快来看看是怎么回事儿吧。
这个算法问题的难点主要有两个,一个是数字和运算符的穷举遍历,另一个是将四则运算表达式作为结果输出。无论是运算符遍历还是表达式输出,都要考虑运算符的优先级,必要时要加括号。当然,也可以采用后缀表达式的形式,避免在枚举遍历的过程中考虑括号的问题。一般我们书写和计算都采用中缀表达式,中缀表达式的特点是运算符始终位于两个操作数的中间,对于运算符的优先级采用括号的方式解决,比如以下四则运算采用的就是中缀表达式的形式:
7 + ( 3 + 2 ) × 4 − 8
后缀表达式又称为“逆波兰表达式”,上述中缀表达式转换成后缀表达式后就是这个样子:
732 + 4 × + 8 −
后缀表达式通过运算符的位置来决定计算顺序,避免使用括号,便于计算机计算处理。后缀表达式的求解计算一般用栈比较方便,具体的方法就是从左向右扫描表达式&#
转载地址:http://wccgj.baihongyu.com/