241. Different Ways to Add Parentheses
来源:互联网 发布:淘宝全球购资质查询 编辑:程序博客网 时间:2024/06/15 17:36
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 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]
题目大意
对input的string,添加括号改变运算顺序,计算出所有可能的值。
PS: 经过尝试后,输出顺序不会影响正确性。
解题思路
利用分治法,以符号位为分界点,将input截成左右两段,递归计算,并将结果push进列表result尾部。
PS: 如果input不含符号,则将其转换为int格式,push进列表result。
算法复杂度
遍历input寻找符号的复杂度:O(n)
计算每种可能顺序结果的复杂度:O(logn)
总复杂度:O(nlogn)
代码实现
class Solution {public: vector<int> diffWaysToCompute(string input) { vector<int> result; int length= input.size(); for (int i = 0; i < length; i++) { // 以+, -, * 为‘分’的标志 if (input[i] == '+' || input[i] == '-' || input[i] == '*') { vector<int> left = diffWaysToCompute(input.substr(0, i)); vector<int> right = diffWaysToCompute(input.substr(i+1)); vector<int>::iterator j, k; for (j = left.begin(); j != left.end(); j++) { for (k = right.begin(); k != right.end(); k++) { switch(input[i]) { case '+': result.push_back((*j)+(*k)); break; case '-': result.push_back((*j)-(*k)); break; case '*': result.push_back((*j)*(*k)); } } } } } // input不含符号的情况 if (result.empty()) { result.push_back(atoi(input.c_str())); } return result; }};
阅读全文
0 0
- [leetcode] 241.Different Ways to Add Parentheses
- Leetcode-241.Different Ways to Add Parentheses
- 241. Different Ways to Add Parentheses LeetCode
- Leetcode- 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
- LeetCode *** 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
- 241. Different Ways to Add Parentheses
- 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
- 高精度大整数模板
- pandas dataframe行和列的操作
- Numpy 使用详解
- 学生信息管理系统问题(一)
- hive导入和导出的几种方式
- 241. Different Ways to Add Parentheses
- Android -getApplicationContext和Context的区别
- python opencv入门 Harris角点检测(31)
- loadrunner Web_类函数之web_file()
- vue简介及其安装
- 线程的基本概念?线程的基本状态以及状态之间的关系
- Golang实现正方教务系统爬虫(一)
- VirtualBox中,虚拟系统文件VDI移动或者复制
- loadrunner Web_类函数之web_find()