且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

[LeetCode] Different Ways to Add Parentheses

更新时间:2022-06-08 18:59:33

Well, this problem seems to be a little tricky at first glance. However, the idea (taken from this link) is really simple. Let's take the equation 2*3-4*5 in the problem statement as an example to illustrate the idea. 

The idea is fairly simple: each time we encounter an operator, split the input string into two parts, one left to the operator and the other right to it. For example, when we reach -, we split the string into 2*3 and 4*5. Then we recursively (yeah, this is the biggest simplification) compute all possible values of the left and right parts and operate on all the possible pairs of them. The idea will become much more obvious if you read the following code.

 1 class Solution {
 2 public:
 3     vector<int> diffWaysToCompute(string input) {
 4         vector<int> outputs;
 5         int n = input.length();
 6         for (int i = 0; i < n; i++) {
 7             if (input[i] == '+' || input[i] == '-' || input[i] == '*') {
 8                 string left = input.substr(0, i);
 9                 string right = input.substr(i + 1, n - i - 1);
10                 vector<int> lval = diffWaysToCompute(left);
11                 vector<int> rval = diffWaysToCompute(right);
12                 for (int l : lval) {
13                     for (int r : rval) {
14                         switch (input[i]) {
15                             case '+':
16                                 outputs.push_back(l + r);
17                                 break;
18                             case '-':
19                                 outputs.push_back(l - r);
20                                 break;
21                             default:
22                                 outputs.push_back(l * r);
23                         }
24                     }
25                 }
26             }
27         }
28         if (outputs.empty())
29             outputs.push_back(stoi(input));
30         return outputs;
31     }
32 };