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 ...
随机推荐
- vul/0day/shellcode/payload/poc/exp
vul--泛指漏洞 0day--未公开或虽已公开但还没有修复方法的漏洞 shellcode--远程溢出后执行的那段代码 payload--攻击载荷,送到远端机器执行的整段代码 poc--Proof o ...
- Linux使用ntpdate和ntpd进行时间同步
生产环境关联主机间常要求时间一致,若有NTP时间同步服务器,可配置各主机与时间同步服务器同步时间. 1.使用ntpdate进行时间同步 安装ntp客户端: yum install ntpdate 同步 ...
- js数组及常用数学方法
数组方法 清空数组 1: arr.length=0; 2: arr=[]; arr.push() //往数组最后一个添加元素,会待会一个返回值,就是新的数组长度arr.uns ...
- [Codeforces797F]Mice and Holes
Problem n个老鼠,m个洞,告诉你他们的一维坐标和m个洞的容量限制,问最小总距离. Solution 用dp[i][j]表示前i个洞,进了前j个老鼠的最小代价 dp[i][j]=min(dp[i ...
- 【原创】QString 函数 replace()indexOf()、 lastindexOf()
1.替换函数 示例: QString x = "Say yes!"; QString y = "no"; x.replace(, , y); // x == & ...
- hdu 1057 A + B Again
A + B Again Problem Description There must be many A + B problems in our HDOJ , now a new one is com ...
- node(1) npm是什么?node的异步概念
NPM是随同的NodeJS一起安装的包管理工具 他可以做什么? 1.可以从NPM服务器下载别人的东西使用 2.可以把自己的东西传到NPM服务器,让别人下载使用 淘宝的镜像会快一点 cnpm ...
- 201621123001 《Java程序设计》第12周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 字节流以字节为基本处理单位,字符流以字符为基本处理单位,以Reader和Writer为基础派生出的一系列类 字 ...
- 安装Android开发工具
这两天开始学Android,首先要要解决的是安装编译器的问题,经过我这两天的探究,我把收获总结一下 最简单的编译器是ADT-bundle,它是一个集成的工具,里面有eclipse,也不需要下载SDK, ...
- 究竟 javascript 错误处理有哪些类型?
有时候,在自己封装的工具函数中,不传参或传入了错误类型的参数,也要适当的抛出一些错误以示警告:使用框架不正常情况下也会抛出错误,如果对错误一无所知,便无从下手调试.综合上述,了解错误的处理机制是多么必 ...