【java】227. 基本计算器 II---思路简单,代码清晰!!!

给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。

整数除法仅保留整数部分。

示例 1:

输入:s = “3+2*2”
输出:7
示例 2:

输入:s = " 3/2 "
输出:1
示例 3:

输入:s = " 3+5 / 2 "
输出:5

提示:

1 <= s.length <= 3 * 105
s 由整数和算符 (’+’, ‘-’, ‘*’, ‘/’) 组成,中间由一些空格隔开
s 表示一个 有效表达式
表达式中的所有整数都是非负整数,且在范围 [0, 231 - 1] 内
题目数据保证答案是一个 32-bit 整数

代码:
public static int calculate(String s) {
    
    
		s=s.replace(" ","");
		//遇见“/”,“*”是计算栈顶和下一个数字运算的结果并存入栈中
		Stack<Integer> num1=new Stack<>();//遇见数字存入(要判断正负)
		int sign1=1,res=0;
		for(int i=0;i<s.length();i++) {
    
    
			if(Character.isDigit(s.charAt(i))) {
    
    
				int cur=s.charAt(i)-'0';
				while(i+1<s.length()&&Character.isDigit(s.charAt(i+1))) {
    
    
					cur=cur*10+s.charAt(++i)-'0';
				}
				num1.push(cur*sign1);	
			}else if(s.charAt(i)=='+') {
    
    
				sign1=1;
			}else if(s.charAt(i)=='-') {
    
    
				sign1=-1;
			}else{
    
    
				int j=i;
				int cur=s.charAt(++i)-'0';
				while(i+1<s.length()&&Character.isDigit(s.charAt(i+1))) {
    
    
					cur=cur*10+s.charAt(++i)-'0';
				}
				if(s.charAt(j)=='/') {
    
    
					num1.push((int)num1.pop()/cur);
				}else {
    
    
					num1.push(num1.pop()*cur);
				}
			}
		}
		while(!num1.empty()) {
    
    
			res+=num1.pop();
		}
		return res;
}

猜你喜欢

转载自blog.csdn.net/qq_44461217/article/details/114659315