241. Different Ways to Add Parentheses

来源:互联网 发布:一维数组的概念 编辑:程序博客网 时间:2024/06/10 17:29

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]

题意:一个算式,不同的加括号方式就有不同的结果,给出所有可能的结果。

思路:类似于Unique Binary Search Tree II。以不同的运算符做区分,计算左边的值,计算右边的值,然后相乘放入最后结果。

class Solution {public:vector<int> diffWaysToCompute(string input) {vector<int> res;if (input.empty())return res;for (int i = 0; i < input.size(); i++){char ch = input[i];if (ch == '+' || ch == '-' || ch == '*'){vector<int> left = diffWaysToCompute(input.substr(0, i));vector<int> right = diffWaysToCompute(input.substr(i + 1));int tmp = 0;for (int l : left){for (int r : right){switch (ch){case '+':tmp = l + r;break;case '-':tmp = l - r;break;case '*':tmp = l*r;break;}res.push_back(tmp);}}}}if (res.empty()){res.push_back(atoi(input.c_str()));}return res;}};










0 0
原创粉丝点击