题目链接: https://leetcode.com/problems/different-ways-to-add-parentheses/
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"
.
((2-1)-1) = 0 (2-(1-1)) = 2
Output: [0, 2]
Example 2
Input: "2*3-4*5"
(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
Output: [-34, -14, -10, -10, 10]
思路: 使用分治法, 以每个符号为分割, 将其分为左右两部分, 每一部分返回一个数组, 代表这一部分的运算结果有几种, 然后再用这个分割的符号, 将左右两边的各种结果以这种符号运算, 保存到一个新的数组中, 然后返回就是了.
代码如下:
class Solution {
public:
vector<int> diffWaysToCompute(string input) {
int len = input.size();
vector<int> ans;
for(int i =0; i < len; i++)
{
if(isdigit(input[i])) continue;
string left=input.substr(0,i), right=input.substr(i+1);
auto lAns = diffWaysToCompute(left), rAns = diffWaysToCompute(right);
for(auto val1: lAns)
{
for(auto val2: rAns)
{
if(input[i]=='+') ans.push_back(val1+val2);
else if(input[i]=='-') ans.push_back(val1-val2);
else if(input[i]=='*') ans.push_back(val1*val2);
}
}
}
return ans.size()==0?vector<int>{stoi(input)}:ans;
}
};