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)) = 2Output:
[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) = 10Output:
[-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";}}解题状态:
相关文章推荐
- Divide and Conquer:241. Different Ways to Add Parentheses
- [leetcode]241. Different Ways to Add Parentheses
- 241. Different Ways to Add Parentheses
- [Leetcode] 241. Different Ways to Add Parentheses 解题报告
- 【leetcode题解】【再做一遍】【47】【M】241. Different Ways to Add Parentheses
- leetcode-241. Different Ways to Add Parentheses
- leetcode 241. Different Ways to Add Parentheses
- LeetCode[241. Different Ways to Add Parentheses] 难度[medium]
- Leetcode 241. Different Ways to Add Parentheses
- LeetCode 241. Different Ways to Add Parentheses
- [leetcode] 241. Different Ways to Add Parentheses
- <LeetCode OJ> 241. Different Ways to Add Parentheses
- leecode 解题总结:241. Different Ways to Add Parentheses
- LeetCode 241. Different Ways to Add Parentheses
- LeetCode 241. Different Ways to Add Parentheses
- 【LeetCode】241. Different Ways to Add Parentheses
- 241. Different Ways to Add Parentheses(divide and conquer)
- 241. Different Ways to Add Parentheses
- 241. Different Ways to Add Parentheses
- LeetCode解题报告 241. Different Ways to Add Parentheses [medium]