LeetCode OJ:Basic Calculator(基础计算器)
Implement a basic calculator to evaluate a simple expression string.
The expression string may contain open ( and closing parentheses ), the plus + or minus sign -, non-negative integers and empty spaces .
You may assume that the given expression is always valid.
Some examples:
"1 + 1" = 2
" 2-1 + 2 " = 3
"(1+(4+5+2)-3)+(6+8)" = 23
一个基本的计算器而已,可以使用两个栈来解决,下面这个方法是参考了别人的做法,当遇到左括号的时候要先考虑括号里面的东西,所以把前面的结果全部都入栈。遇到右括号的时候将左括号之前的栈的的东西拿出来计算再次得到临时的结果。这里由于
之后有+和减号,所以可以使用sign == -1来模拟减号。 这里的res实际上也相当于一个栈的角色:
class Solution {
public:
int calculate(string s) {
int sz = s.size();
int left, right;
char optor = '';
stack<int> tokenStk; //注意这里是int
int res = ;
int sign = ;
for(int i = ; i < sz; ++i){
if(s[i] == '+')
sign = ;
else if(s[i] == '-')
sign = -;
else if(isdigit(s[i])){
int tmpNum = ;
for(int j = i; j < sz; ++j){
if(isdigit(s[j])){
tmpNum *= ;
tmpNum += (s[j] - '');
i = j;
}else break;
}
res += sign * tmpNum;
}else if(s[i] == '('){
tokenStk.push(res);
res = ;
tokenStk.push(sign);
sign = ;
}else if(s[i] == ')'){
int tmpSign = tokenStk.top();
tokenStk.pop();
int left = tokenStk.top();
tokenStk.pop();
res = res * tmpSign + left;
sign = ;
}
}
return res;
}
};
下面是java写的,不得不说java里面处理字符串的函数确实比c++要友好很多哈,代码如下所示:
public class Solution {
public int calculate(String s) {
int sz = s.length();
int ret = 0;
int sign = 1;
int res = 0;
Stack<Integer> stk = new Stack<Integer>();
for(int i = 0; i < sz; i++){
if(s.charAt(i) == '+')
sign = 1;
else if(s.charAt(i) == '-')
sign = -1;
else if(Character.isDigit(s.charAt(i))){
int beg = i;
while(i+1 < sz && Character.isDigit(s.charAt(i+1)))
i++;
res += sign * Integer.parseInt(s.substring(beg, i+1));//将数字分割开
}else if(s.charAt(i) == '('){
stk.push(res);
stk.push(sign);
res = 0;
sign = 1;
}else if(s.charAt(i) == ')'){
int tmpSign = stk.pop();
int parLeft = stk.pop();//括号左边,也就是外面的值
res = parLeft + tmpSign * res;//暂时还是不用push的
}else//跳过空格
continue;
}
return res;
}
}
LeetCode OJ:Basic Calculator(基础计算器)的更多相关文章
- [LeetCode] 224. Basic Calculator 基本计算器
Implement a basic calculator to evaluate a simple expression string. The expression string may conta ...
- LeetCode OJ Basic Calculator II
Basic Calculator II 题目 思路 和这个一样:Basic Calculator I 代码 class ExpressionTransformation { public: strin ...
- [LeetCode] 227. Basic Calculator II 基本计算器 II
Implement a basic calculator to evaluate a simple expression string. The expression string contains ...
- [LeetCode] Basic Calculator 基本计算器
Implement a basic calculator to evaluate a simple expression string. The expression string may conta ...
- [LeetCode] 772. 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 ...
- [leetcode]224. Basic Calculator
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 contains ...
- Java for LeetCode 227 Basic Calculator II
Implement a basic calculator to evaluate a simple expression string. The expression string contains ...
- Java for LeetCode 224 Basic Calculator
Implement a basic calculator to evaluate a simple expression string. The expression string may conta ...
随机推荐
- zabbix-2.4.8-1添加MySQL主从状态监控
1.安装zabbix-agentyum -y install zabbix-2.4.8-1.el6.x86_64.rpm zabbix-agent-2.4.8-1.el6.x86_64.rpm 安装以 ...
- MySQL数据库(5)_MySQL数据库视图、触发器
一.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用. SELECT * FROM ( S ...
- Kafka Confluent
今天我们要讲的大数据公司叫作Confluent,这个公司是前LinkedIn员工出来后联合创办的,而创业的基础是一款叫作Apache Kafka的开源软件. Confluen联合创始人Jun Rao即 ...
- MATLAB画图设置长宽。并高清复制
- 什么是JavaBeans?
参看维基百科,归纳出以下几条: JavaBeans是指符合某些标准的类, Bean这个名称用于涵盖这个标准, 其目的在于创建可重用的Java组件. 由于Bean是很“死板”的东西,因此它可以持久存储, ...
- java-jpa-criteriaBuilder使用入门
项目中使用jpa ,第一次见查询起来一脸蒙,这就去查下jpa查询的方式,和概念. jpa 元模型 criteria 查询 CriteriaBuilder 安全查询创建工厂 CriteriaQuery ...
- K8s + Flannel 网络架构图
这是Flannel官网给出的网络架构图 这是通过自己的理解画的逻辑结构图 查看bridge [root@node01 ~]# brctl show bridge name bridge id STP ...
- Nginx的访问日志配置信息详解
Nginx的访问日志可以让我们知晓用户的地址,网站的那些部分最受欢迎,以及用户浏览时间等.Nginx会把每个用户的访问日志记录到指定的日志文件中. Nginx主要有两个参数来控制 log_format ...
- 出现GC overhead limit exceeded 的解决方案
当我在使用MyEclispe IDE创建Maven项目的时候出现 "An internal error occurred during: “Build Project”. GC overh ...
- html里id和name的异同
id与name的作用,作为标签的标识符,基本上是一样的. name是老方法,id是在name基础上发明的,比name“现代化”一点,用的范围广一点 <...>中的name原来(刚发明时)就 ...