Java实现 LeetCode 227 基本计算器 II(二)
2024-09-07 04:56:06
227. 基本计算器 II
实现一个基本的计算器来计算一个简单的字符串表达式的值。
字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。
示例 1:
输入: “3+2*2”
输出: 7
示例 2:
输入: " 3/2 "
输出: 1
示例 3:
输入: " 3+5 / 2 "
输出: 5
说明:
你可以假设所给定的表达式都是有效的。
请不要使用内置的库函数 eval。
PS:
每次处理完一个数就压栈,可以不处理括号
class Solution {
public int calculate(String s) {
Stack<Integer> stack = new Stack<>();
int sign = 1; // 表示正负号 2-3*3 = 2+(-3)*3
int msign = 0; // 1表示相乘 -1 表示相除 0 表示无操作
for(int i=0; i<s.length(); i++){
char ch = s.charAt(i);
if(Character.isDigit(ch)){
// 如果是数字
int num = ch - '0';
while(i+1<s.length() && Character.isDigit(s.charAt(i+1))){
num = num*10 + (s.charAt(i+1) - '0');
i++;
}
if(msign == 1){ //相乘
stack.push(stack.pop() * num);
msign = 0;
}else if(msign == -1){ // 相除
stack.push(stack.pop() / num);
msign = 0;
}else{
stack.push(num * sign);
}
}else if(ch == '+'){
sign = 1;
}else if(ch == '-'){
sign = -1;
}else if(ch == '*'){
msign = 1;
sign = 1;
}else if(ch == '/'){
msign = -1;
sign = 1;
}
}
int res = 0;
while(!stack.isEmpty()){
res += stack.pop();
}
return res;
}
}
最新文章
- hyper-v上的虚拟机安装linux LC后CDROM无法使用
- HDFS Federation (读书笔记)
- 2016年JS面试题目汇总
- 各种数据处理方案(SQL,NoSQL,其他)的应用场景
- MySQL数据库远程连接开启方法
- 结构体buf_chunk_t
- POJ 2429
- Linux查看硬件信息,主板型号及内存硬件,驱动设备,查看设备,查看CPU。
- Linux无处不在
- html5的Canvas
- mysql学习(补充)
- cx_Oracle模块学习之绑定变量
- Linux环境进程间通信(一):管道及命名管道
- xtrabackup 2.0.8备份mysql5.1.65报错
- WebStorm 2017 最新版激活方式
- shell下office、html、pdf文档互转方法
- TypeError:_12.store.query is not a function
- 一个类搞定UIScrollView那些事儿
- kubernetes 微服务西游记(持续更新中...)
- 子集三种生成方法 java