1. 程式人生 > >241.為運算表示式設計優先順序

241.為運算表示式設計優先順序

給定一個含有數字和運算子的字串,為表示式新增括號,改變其運算優先順序以求出不同的結果。你需要給出所有可能的組合的結果。有效的運算子號包含 +- 以及 * 。

示例 1:

輸入: "2-1-1"
輸出: [0, 2]
解釋: 
((2-1)-1) = 0 
(2-(1-1)) = 2

示例 2:

輸入: "2*3-4*5"
輸出: [-34, -14, -10, -10, 10]
解釋: 
(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

class Solution { public:     vector<int> diffWaysToCompute(string input) {         vector<int> res;         for (int i = 0; i < input.size(); ++i) {             if (input[i] == '+' || input[i] == '-' || input[i] == '*') {                 vector<int> left = diffWaysToCompute(input.substr(0, i));                 vector<int> right = diffWaysToCompute(input.substr(i + 1));                 for (int j = 0; j < left.size(); ++j) {                     for (int k = 0; k < right.size(); ++k) {                         if (input[i] == '+') res.push_back(left[j] + right[k]);                         else if (input[i] == '-') res.push_back(left[j] - right[k]);                         else res.push_back(left[j] * right[k]);                     }                 }             }         }         if (res.empty()) res.push_back(atoi(input.c_str()));         return res;     } };