leetcode 241
题目描述:Given a string of numbers and operators, return all possible results from computing all the different possible ways to group numbers and operators. The valid operators are +, - and *.
Example 1:
Input: “2-1-1”
Output: [0, 2]
Explanation:
((2-1)-1) = 0
(2-(1-1)) = 2
Example 2:
Input: “2*3-4*5”
Output: [-34, -14, -10, -10, 10]
Explanation:
(2*(3-(4*5))) = -34
((2*3)-(4*5)) = -14
((2*(3-4))*5) = -10
(2*((3-4)*5)) = -10
(((2*3)-4)*5) = 10
题目要求找出一个计算式加括号后可以得到的所有结果,此问题的复杂性在于如果要考虑所有的可能性的话其复杂度是以阶乘向上增长的,有n个运算符的时候所有的可能性就有n!种,如果使用暴力穷举的话其运算量在运算符较多时就已经在一个很恐怖的数量级了,所以必须对其进行简化。其实很容易发现在这些阶乘的可能性中,其中存在大量的重复,不难看出所有的计算式都可以写成 (substring1)op(substring2) ( s u b s t r i n g 1 ) o p ( s u b s t r i n g 2 ) 这样的形式,而其实无论两个子字符串中的运算符的运算顺序是怎么样的,其实最终答案都是一样的,而暴力穷举的话这部分就造成了大量的重复,所以这样就可以想到这题可以用分治法进行处理,对于每一个运算符都以它为分隔符,然后分成左右两个部分