[leetcode][dfs] Different Ways to Add Parentheses
来源:互联网 发布:哪些网络装修公司好 编辑:程序博客网 时间:2024/05/22 11:48
题目:
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 1
Input: "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]
class Solution {public:bool isOptr(char ch){if (ch == '+' || ch == '-' || ch == '*') return true;return false;}int oneCalculate(int n1, int n2, char optr){int res = 0;switch (optr){case '+':res = n1 + n2; break;case '-':res = n1 - n2; break;case '*':res = n1 * n2; break;default:break;}return res;}void calculate(vector<int> nums, vector<char> optr, int start, vector<int> &res){if (optr.empty()){res.push_back(nums[0]);return;}for (int i = start; i < nums.size()-1;++i){//注意从start开始int oneC = oneCalculate(nums[i], nums[i + 1], optr[i]);//删除一个操作符vector<char> optrNew(optr);vector<char>::iterator iterOptr = optrNew.begin();optrNew.erase(iterOptr+i);//删除两个操作数并在该位置插入oneCvector<int> numsNew(nums);vector<int>::iterator iterNum = numsNew.begin();numsNew.erase(iterNum + i, iterNum + i + 2);iterNum = numsNew.begin()+i;numsNew.insert(iterNum, oneC);int start = i - 1 >0 ? i - 1 : 0;calculate(numsNew, optrNew, start, res);}}vector<int> diffWaysToCompute(string input){int n = input.size();vector<int> nums;vector<char> optr;int i = 0;while (i < n){if (isOptr(input[i])){optr.push_back(input[i]);++i;}else if (isdigit(input[i])){int tmp = 0;while (isdigit(input[i])){tmp = 10 * tmp + (input[i] - '0');++i;}nums.push_back(tmp);}else ++i;}vector<int> res;calculate(nums, optr, 0, res);return res;}int main(){string input;cin >> input;vector<int> res = diffWaysToCompute(input);for (int i = 0; i < res.size()-1; ++i){cout << res[i] << ' ';}if (res.size() > 0) cout << res[res.size() - 1] << endl;return 0;}};
0 0
- [leetcode][dfs] 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 - Different Ways to Add Parentheses
- [leetCode] Different Ways to Add Parentheses
- [leetcode 241]Different Ways to Add Parentheses
- Leetcode|Different Ways to Add Parentheses
- LeetCode Different Ways to Add Parentheses
- [LeetCode] Different Ways to Add Parentheses
- [leetcode] 241.Different Ways to Add Parentheses
- [leetcode]Different Ways to Add Parentheses
- LeetCode(241)Different Ways to Add Parentheses
- [LeetCode]Different Ways to Add Parentheses
- leetcode 241: Different Ways to Add Parentheses
- Leetcode: Different Ways to Add Parentheses
- [LeetCode 241] Different Ways to Add Parentheses
- LeetCode -- Different Ways to Add Parentheses
- Java集合的Set、List、Map异同分析
- iOS面试题2
- 这些题是真的够水的啊!
- hello shell
- iOS面试题3
- [leetcode][dfs] Different Ways to Add Parentheses
- 如何解决eclipse、MyEclipse中变量名自动补全问题
- C/C++混合编程出现:预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)问题的解决方案
- 面向服务的体系结构(SOA)应用的总体技术要求-笔记
- POJ 1228 求多边形重心
- -ROOT-表和.META.表结构详解
- 把握linux内核设计思想(十一):内存管理之页的分配与回收
- 正则表达式匹配
- 介绍生产者-消费者模式