Different Ways to Add Parentheses -- leetcode

来源:互联网 发布:115gv资源出售淘宝 编辑:程序博客网 时间:2024/06/04 21:14

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) {        vector<int> ans;        for (int i=0; i<input.size(); i++) {            if (!isdigit(input[i])) {                auto left = diffWaysToCompute(input.substr(0, i));                auto right = diffWaysToCompute(input.substr(i+1));                for (auto l: left) {                    for (auto r: right)                        ans.push_back(input[i]=='+' ? l+r : (input[i]=='-' ? l-r : l*r));                }            }        }        if (ans.empty())            ans.push_back(stoi(input));        return ans;    }};


0 0
原创粉丝点击