【LeetCode】241. Different Ways to Add Parentheses
2017-05-18 16:44
375 查看
【LeetCode】241. Different Ways to Add Parentheses
【问题描述】
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 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]
【解题思路】
动态规划(DP):
1. 预处理,num存储数字,sign存储运算符2. ans[i][j]存储第i个数字到第j个数字的所有运算结果
3. 对所有n∈[i, j],计算del = ans[i]
[k] +/-/*(根据sign
得到) ans[n+1][j][k], 将del压入ans[i][j]中
4. 返回ans[0][len-1]
【代码】
class Solution { public: vector<int> diffWaysToCompute(string input) { vector<int> num, sign; int i, j, n, k = 0, len, u, v; for(i = 0;i < input.length();i++) { if(input[i] >= '0' && input[i] <= '9') k = k * 10 + (int)input[i] - 48; else { num.push_back(k); k = 0; switch (input[i]) { case '+' : sign.push_back(1);break; case '-' : sign.push_back(2);break; case '*' : sign.push_back(3);break; } } } num.push_back(k); len = num.size(); vector<vector<vector<int>>> ans(len, vector<vector<int>>(len, vector<int>())); for(i = 0;i < len;i++) ans[i][i].push_back(num[i]); for(k = 1;k < len;k++) { for(j = 0;j + k < len;j++) { for(n = 0;n < k;n++) { for(u = 0;u < ans[j][j+n].size();u++) { for(v = 0;v < ans[j+n+1][j+k].size();v++) { int del = (sign[j+n] == 1) ? ans[j][j+n][u]+ans[j+n+1][j+k][v] : ((sign[j+n] == 2) ? ans[j][j+n][u]-ans[j+n+1][j+k][v] : ans[j][j+n][u]*ans[j+n+1][j+k][v]); ans[j][j+k].push_back(del); } } } } } return ans[0][len-1]; } };
相关文章推荐
- [leetcode] 241. Different Ways to Add Parentheses
- LeetCode *** 241. Different Ways to Add Parentheses
- Leetcode 241. Different Ways to Add Parentheses (Medium) (cpp)
- LeetCode[241. Different Ways to Add Parentheses] 难度[medium]
- leetcode -- 241. Different Ways to Add Parentheses 【分治法】
- leetcode_middle_34_241. Different Ways to Add Parentheses
- LeetCode 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 (Python版)
- <LeetCode OJ> 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
- 【LeetCode】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
- 【LeetCode】 241. Different Ways to Add Parentheses
- 【LeetCode】241. Different Ways to Add Parentheses