优选算法-栈:67.基本计算器Ⅱ

题目链接:227. 基本计算器 II(中等)

算法原理:

解法:利用栈模拟计算过程

击败95.31%

时间复杂度O(N)

Java代码:

java 复制代码
import java.util.ArrayDeque;
import java.util.Deque;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 王洋
 * Date: 2025-09-16
 * Time: 19:25
 */
class Solution {
    //227. 基本计算器 II
    public int calculate(String s) {
        Deque<Integer> stack=new ArrayDeque<>();
        //要写成ArrayDeque(它是实现了Deque接口的类),而Deque是接口,不能实例化
        char op='+';int i=0,n=s.length();
        char[] ss=s.toCharArray();
        while(i<n){
            if(ss[i]==' ')i++;
            else if(!isOperator(ss[i])){
                int tmp=0;
                while(i<n&&ss[i]>='0'&&ss[i]<='9'){
                    tmp=tmp*10+(int)(ss[i]-'0');
                    i++;
                }
                if(op=='+') stack.push(tmp);
                else if(op=='-') stack.push(-tmp);
                else if(op=='*') stack.push(stack.pop()*tmp);
                else stack.push(stack.pop()/tmp);
            }else{
                op=ss[i];
                i++;
            }
        }
        int ret=0;
        while(!stack.isEmpty()) ret+=stack.pop();
        return ret;
    }
    public boolean isOperator(char ch){
        return (ch=='+'||ch=='-'||ch=='*'||ch=='/');
    }
}
相关推荐
wuguan_1 分钟前
C#:多态函数重载、态符号重载、抽象、虚方法
开发语言·c#
小信啊啊1 分钟前
Go语言数组与切片的区别
开发语言·后端·golang
oscar9991 分钟前
CSP-J教程——第二阶段第十二、十三课:排序与查找算法
数据结构·算法·排序算法
中国胖子风清扬3 分钟前
SpringAI和 Langchain4j等 AI 框架之间的差异和开发经验
java·数据库·人工智能·spring boot·spring cloud·ai·langchain
chao1898448 分钟前
MATLAB与HFSS联合仿真
算法
计算机学姐14 分钟前
基于php的摄影网站系统
开发语言·vue.js·后端·mysql·php·phpstorm
月明长歌14 分钟前
【码道初阶】牛客TSINGK110:二叉树遍历(较难)如何根据“扩展先序遍历”构建二叉树?
java·数据结构·算法
jqrbcts17 分钟前
关于发那科机器人视觉补偿报警设置
人工智能·算法
_Li.20 分钟前
机器学习-线性判别函数
人工智能·算法·机器学习
蒲小英20 分钟前
算法-栈与队列
算法