您的位置:首页 > Web前端

241. Different Ways to Add Parentheses

2017-04-11 17:20 357 查看
题目: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 1Input: 
"2-1-1"
.
((2-1)-1) = 0
(2-(1-1)) = 2
Output: 
[0, 2]
Example 2Input: 
"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]
翻译:
给定一串数字和运算符,从计算所有不同的可能方式返回所有可能的结果,以组合数字和运算符。 有效的运算符是+, - 和*。实施例1输入:“2-1-1”。((2-1)-1)= 0(2-(1-1))= 2输出:[0,2]实施例2输入:“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输出:[-34,-14,-10,10-10]
代码展示:#include<map>#include<iostream>#include<string>#include<vector>#include<cstdlib>using namespace std;class Solution {vector<int> f(string str,map< string , vector<int> > &dmap) {int len = str.length();vector<int> v;for(int i = 0; i< len;i++) {if(str[i] == '+' || str[i] == '-' || str[i] == '*') {string subStr1 = str.substr(0,i);vector<int> v1,v2;if(dmap.find(subStr1) != dmap.end()) v1 = dmap[subStr1];else v1 = f(subStr1,dmap);string subStr2 = str.substr(i+1);if(dmap.find(subStr2) != dmap.end()) v2 = dmap[subStr2];else v2 = f(subStr2,dmap);for(int j  = 0 ; j < v1.size(); j++) {for(int k = 0 ; k < v2.size(); k++) {switch(str[i]) {case '+':v.push_back(v1[j]+v2[k]);break;case '-':v.push_back(v1[j]-v2[k]);break;default:v.push_back(v1[j]*v2[k]);break;}}}}}if(v.empty()) v.push_back(atoi(str.c_str() ));dmap[str] = v;return v;}public:vector<int> diffWaysToCompute(string input) {map<string, vector<int> > dmap;return f(input,dmap);}};int main() {Solution s;vector<string> strs;strs.push_back("2-1-1");strs.push_back("2*3-4*5");for(int i = 0; i< strs.size() ;i++) {vector<int> v = s.diffWaysToCompute(strs[i]);cout << "{ ";for(int j = 0 ; j< v.size(); j++) {cout << v[j] << ",";}cout << " }\n";}}解题状态:
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: