leetcode 772.Basic Calculator III
这道题就可以结合Basic Calculator中的两种做法了,分别是括号运算和四则运算的,则使用stack作为保持的结果,而使用递归来处理括号内的值的。
- class Solution {
- public:
- int calculate(string s) {
- int num=,res=,n=s.size();
- stack<int> st;
- char op='+';
- for(int i=;i<n;i++){
- char c=s[i];
- if(c>='' && c<=''){
- num=num*+c-'';
- }else if(c=='('){
- int j=i,cnt=;
- for(;i<n;i++){
- if(s[i]=='(') cnt++;
- if(s[i]==')') cnt--;
- if(cnt==) break;
- }
- num=calculate(s.substr(j+,i-j-));
- }
- if(s[i]=='+' || s[i]=='-' || s[i]=='*' || s[i]=='/' || i==n-){
- if(op=='+') st.push(num);
- if(op=='-') st.push(-num);
- if(op=='*' || op=='/'){
- int temp=(op=='*')?(st.top()*num):(st.top()/num);
- st.pop();
- st.push(temp);
- }
- op=s[i];
- num=;
- }
- }
- while(!st.empty()){
- res+=st.top();
- st.pop();
- }
- return res;
- }
- };
当然这个地方也是可以进行一个变化的,不使用栈,而是考虑用一个变量来保存上一个值的,即栈顶的值,然后继续进行处理的。
- class Solution {
- public:
- int calculate(string s) {
- int res=,num=,last=,n=s.size();
- char op='+';
- for(int i=;i<n;i++){
- char c=s[i];
- if(c>=''&&c<=''){
- num=num*+c-'';
- }
- else if(c=='('){
- int j=i,cnt=;
- for(;i<n;i++){
- if(s[i]=='(') cnt++;
- if(s[i]==')') cnt--;
- if(cnt==) break;
- }
- num=calculate(s.substr(j+,i-j-));
- }
- if(c=='+' || c=='-' ||c=='*' ||c=='/' ||i==n-){
- if(op=='+') last+=num;
- if(op=='-') last-=num;
- if(op=='*') last*=num;
- if(op=='/') last/=num;
- if(c=='+'||c=='-'||i==n-){
- res+=last;
- last=;
- }
- op=c;
- num=;
- }
- }
- return res;
- }
- };
leetcode 772.Basic Calculator III的更多相关文章
- [LeetCode] 772. Basic Calculator III 基本计算器之三
Implement a basic calculator to evaluate a simple expression string. The expression string may conta ...
- 【leetcode】Basic Calculator III
题目如下: Implement a basic calculator to evaluate a simple expression string. The expression string may ...
- [LeetCode] 227. Basic Calculator II 基本计算器之二
Implement a basic calculator to evaluate a simple expression string. The expression string contains ...
- Lintcode: Expression Evaluation (Basic Calculator III)
Given an expression string array, return the final result of this expression Have you met this quest ...
- [LeetCode] 224. Basic Calculator 基本计算器
Implement a basic calculator to evaluate a simple expression string. The expression string may conta ...
- [LeetCode] 227. Basic Calculator II 基本计算器 II
Implement a basic calculator to evaluate a simple expression string. The expression string contains ...
- [LeetCode] Basic Calculator III 基本计算器之三
Implement a basic calculator to evaluate a simple expression string. The expression string may conta ...
- LeetCode#227.Basic Calculator II
题目 Implement a basic calculator to evaluate a simple expression string. The expression string contai ...
- Java for LeetCode 227 Basic Calculator II
Implement a basic calculator to evaluate a simple expression string. The expression string contains ...
随机推荐
- 思科恶意加密TLS流检测论文记录——由于样本不均衡,其实做得并不好,神马99.9的准确率都是浮云啊,之所以思科使用DNS和http一个重要假设是DGA和HTTP C&C(正常http会有图片等)。一开始思科使用的逻辑回归,后面17年文章是随机森林。
论文记录:Identifying Encrypted Malware Traffic with Contextual Flow Data from:https://songcoming.github. ...
- Find a way out of the ClassLoader maze
June 6, 2003 Q: When should I use Thread.getContextClassLoader() ? A: Although not frequently asked, ...
- android 数据库添加字符串 添加失败 解决方案
这两天遇到一个棘手的问题,在往sqlite数据库中添加数据时,总是添加失败,但是添加数字却可以.原来是添加时,忘记添加''号修饰. 修改前: 修改后: 这样就完美解决.
- view的focusable属性改变设置是否可获取光标
注意图中我画的箭头,当时鼠标点击的黑色圈圈的位置,然后按钮出现了按下的效果(黄色的描边) 刚开始看到这种效果很是好奇,不知道是怎么实现的,后来仔细一想,应该是整个啤酒罐是一张图片(ImageView) ...
- 【Loadrunner_WebService接口】对项目中的GetProduct接口生成性能脚本
一.环境 https://xxx.xxx.svc?wsdl 用户名:username 密码:password 对其中的GetProduct接口进行测试 备注:GetProducts.xml文件内容和S ...
- learning rndis protocol
reference: https://docs.microsoft.com/en-us/windows-hardware/drivers/network/overview-of-remote-ndi ...
- POJ 1035 Spell checker 字符串 难度:0
题目 http://poj.org/problem?id=1035 题意 字典匹配,单词表共有1e4个单词,单词长度小于15,需要对最多50个单词进行匹配.在匹配时,如果直接匹配可以找到待匹配串,则直 ...
- python-列表,元组,range
# 列表# lst = ["光头强", 1, True, {}, (1, ), {123}, ["周杰伦",[], "周杰", " ...
- spoj705
题解: 后缀数组求出height 然后ans=所有串-所有height 代码: #include<bits/stdc++.h> using namespace std; ; int t,a ...
- Java并发编程_wait/notify和CountDownLatch的比较(三)
1.wait/notify方法 package sync; import java.util.ArrayList; import java.util.List; public class WaitA ...