leetcode学习篇三——Different Ways to Add Parentheses
来源:互联网 发布:linux nvidia smi 编辑:程序博客网 时间:2024/06/03 11:18
看到leetcode的题有时还是会懵逼,继续做一下分治的题目,题目如下:
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 *.
难度:medium 通过率:39.2%
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]
因为leetcode上把这道题分在分治算法模块,所以看到这道题思路就往分治法思考,把长字符串分解成小字符串,小字符串再分,然而在哪里分呢,于是尝试遇到运算符就分,写出了以下代码:
class Solution {public: vector<int> diffWaysToCompute(string input) { vector<int> result; //储存结果 for(int i = 0; i < input.length(); i++) { if(input[i] == '+' || input[i]== '-' || input[i]=='*') { //向量l和r分别存储运算符左右式子计算的结果 vector<int> l = diffWaysToCompute(input.substr(0, i)); vector<int> r = diffWaysToCompute(input.substr(i+1, input.size()-i-1)); if(input[i]=='+') result.push_back(l[0]+r[0]); else if(input[i]=='*') result.push_back(l[0]*r[0]); else if(input[i]=='-') result.push_back(l[0]-r[0]); } } if(result.empty()) { result.push_back(input[0]-'0'); //没有运算符,数字进向量 } return result; }};
运行了一下案例2,错了,少了两种结果,于是开始断点debug,发现在计算右边的式子的时候如果大于三个的话,计算结果不知一个,所以向量r的大小不只为1,而代码中直接使用了下标0,所以导致输出结果情况减少。
于是加上循环,对向量r和l大小的双重循环,得到以下代码:
class Solution {public: vector<int> diffWaysToCompute(string input) { vector<int> result; //储存结果 for(int i = 0; i < input.length(); i++) { if(input[i] == '+' || input[i]== '-' || input[i]=='*') { //向量l和r分别存储运算符左右式子计算的结果 vector<int> l = diffWaysToCompute(input.substr(0, i)); vector<int> r = diffWaysToCompute(input.substr(i+1, input.size()-i-1)); for(int j = 0; j < l.size(); j++) { for(int k = 0; k < r.size(); k++) { if(input[i]=='+') { result.push_back(l[j]+r[k]); } else if(input[i]=='*') result.push_back(l[j]*r[k]); else if(input[i]=='-') result.push_back(l[j]-r[k]); } } } } if(result.empty()) { result.push_back(input[0]-'0'); //没有运算符,数字进向量 } return result; }};
哈哈,运行了两个案例,全部正确,提交了,WA……,看了一下解析,出错样例是输入11我的代码输出1,这次很快找到问题所在,因为只有一个数,所以肯定在以下这段代码出问题:
if(result.empty()) { result.push_back(input[0]-'0'); //没有运算符,数字进向量 }
恩,果然……这样写的话只考虑到一位数的情况,于是修改代码,调用函数解决了这个问题,再次提交,AC
vector<int> diffWaysToCompute(string input) { vector<int> result; //储存结果 for(int i = 0; i < input.length(); i++) { if(input[i] == '+' || input[i]== '-' || input[i]=='*') { //向量l和r分别存储运算符左右式子计算的结果 vector<int> l = diffWaysToCompute(input.substr(0, i)); vector<int> r = diffWaysToCompute(input.substr(i+1, input.size()-i-1)); for(int j = 0; j < l.size(); j++) { for(int k = 0; k < r.size(); k++) { if(input[i]=='+') { result.push_back(l[j]+r[k]); } else if(input[i]=='*') result.push_back(l[j]*r[k]); else if(input[i]=='-') result.push_back(l[j]-r[k]); } } } } if(result.empty()) { result.push_back(atoi(input.c_str())); //没有运算符,数字进向量 } return result;}
- 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算法学习日志-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 - 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][dfs] 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
- android:shape属性详解
- 用win10遇到的一些问题
- Myeclipse2014安装及破解
- IoT领域的故事、经历、技术实战
- oracle ora-12541 无监听
- leetcode学习篇三——Different Ways to Add Parentheses
- Android Binder 入门介绍
- Vitalik Buterin 《以太坊紫皮书》
- session和cookie的一些积累和理解
- C#入门经典第6版学习 十一
- lua -->c
- microSd在相对成熟的产品中有过应用么?
- BP神经网络的分类
- RabbitMQ消息队列入门篇(环境配置+Java实例+基础概念)