241. Different Ways to Add Parentheses(week 2)
2017-03-03 15:52
274 查看
思路
这周选了分而治之的题目,这道middle题用的也是这个方法,但是,这个算法还可以继续优化,就像斐波拉契数列一样优化,用空间换时间,把已经算出来的字符串的所有可能的答案保存起来,这样就保证了,不再会出现重复计算的冗余时间。对于一个表达式 a - b, a与b均为表达式,计算a - b的结果 我们需要先知道a的结果与b的结果。对于知道加parentheses的题,只要对表达中的每一个运算符都做这样的操作并递归,就可以得出所有可能结果,希望下面的例子可以帮助理解
2 * 3 - 4 * 5 / | \ (2) * (3 - 4 * 5) (2 * 3) - (4 * 5) (2 * 3 - 4) * (5) / \ (3 - 4 ) * 5 3 - (4 * 5) / \ 3 4
#include <iostream> #include <vector> #include <string> using namespace std; class Solution { public: vector<int> diffWaysToCompute(string input) { int inputLength = input.length(); vector<int> res; for (int i = 0; i <inputLength; i++){ if(input[i] == '+' || input[i]=='-' ||input[i]=='*' ){ vector<int> l = diffWaysToCompute(input.substr(0,i)); vector<int> r = diffWaysToCompute(input.substr(i+1,inputLength-i-1)); for(vector<int>::size_type j = 0; j < l.size(); j++) for(vector<int>::size_type k = 0; k< r.size(); k++){ switch (input[i]){ case '+': res.push_back(l[j]+r[k]); break; case '-': res.push_back(l[j]-r[k]); break; case '*': res.push_back(l[j]*r[k]); break; } } } } if(!res.size())res.push_back(atoi(input.c_str())); return res; } };
相关文章推荐
- 算法课第2周第2题——241. Different Ways to Add Parentheses
- LeetCode 241. Different Ways to Add Parentheses
- leetCode刷题归纳-Divide and Conquer(241. Different Ways to Add Parentheses)
- leetcode题解c++ | 241. Different Ways to Add Parentheses
- LeetCode Algorithms 241. Different Ways to Add Parentheses
- leetcode 241. Different Ways to Add Parentheses (Python版)
- [leetcode] 241. Different Ways to Add Parentheses
- 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
- 241. Different Ways to Add Parentheses
- 241. Different Ways to Add Parentheses
- 241. Different Ways to Add Parentheses
- 题解——Leetcode 241. Different Ways to Add Parentheses 难度:Medium
- leetcode 241. Different Ways to Add Parentheses-分治算法
- 【leetcode题解】【再做一遍】【47】【M】241. Different Ways to Add Parentheses
- 241. Different Ways to Add Parentheses
- <LeetCode OJ> 241. Different Ways to Add Parentheses
- 241. Different Ways to Add Parentheses