题目描述
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: “23-45”
Output: [-34, -14, -10, -10, 10]
Explanation:
(2*(3-(45))) = -34 ((23)-(45)) = -14 ((2(3-4))5) = -10
(2((3-4)5)) = -10 (((23)-4)*5) = 10
解题思路
这道题采用动态规划,对输入的字符串从头到尾进行扫描,当遇到运算符时,以该运算符为分界,将字符串分成运算符前后两个部分,并分别将这两部分作为diffWaysToCompute函数的参数,进行递归,得到两个数值(result1,result2),再进行最后一步运算得到结果,把结果存储在动态数组result中,并进行下一次循环。循环结束,所有可能的结果都保存在result中了。
c++代码
class Solution {
public:
vector<int> diffWaysToCompute(string input) {
vector<int> res;
for (int i = 0; i < input.size(); ++i) {
if (input[i] < '0') {
vector<int> v1 = diffWaysToCompute(input.substr(0, i));
vector<int> v2 = diffWaysToCompute(input.substr(i + 1));
for (auto i1 : v1)
for (auto i2 : v2)
switch (input[i]) {
case '+': res.push_back(i1 + i2); break;
case '-': res.push_back(i1 - i2); break;
case '*': res.push_back(i1 * i2);
}
}
}
if (res.empty()) res.push_back(stoi(input));
return res;
}
};
本文介绍了一种使用动态规划解决计算表达式所有可能结果的方法。对于给定包含数字和运算符(+、-、*)的字符串,文章详细解释了如何通过递归方式分组并计算所有可能的结果。举例说明了不同输入下的多种输出结果。

被折叠的 条评论
为什么被折叠?



