772. 基本计算器 III
实现一个基本的计算器来计算简单的表达式字符串。
表达式字符串只包含非负整数,算符 +、-、*、/ ,左括号 ( 和右括号 ) 。整数除法需要 向下截断 。
你可以假定给定的表达式总是有效的。所有的中间结果的范围为 [-231, 231 - 1] 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/basic-calculator-iii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
import java.util.Deque;
import java.util.LinkedList;
import java.util.Scanner;
class Solution {
private void calculate(Deque<Integer> stack, int sign, int num) {
if (sign == '+') {
stack.push(num);
} else if (sign == '-') {
stack.push(-num);
} else if (sign == '*') {
stack.push(stack.pop() * num);
} else if (sign == '/') {
stack.push(stack.pop() / num);
}
}
private int[] solve(String s, int index) {
Deque<Integer> stack = new LinkedList<>();
int num = 0;
char sign = '+';
while (index < s.length() && s.charAt(index) != ')') {
if (Character.isDigit(s.charAt(index))) {
num = num * 10 + s.charAt(index++) - '0';
} else if (s.charAt(index) == '(') {
int[] next = solve(s, index + 1);
index = next[0] + 1;
num = next[1];
} else {
calculate(stack, sign, num);
num = 0;
sign = s.charAt(index++);
}
}
calculate(stack, sign, num);
return new int[]{index, stack.stream().reduce(0, Integer::sum)};
}
public int calculate(String s) {
if (s == null || s.length() == 0) {
return 0;
}
return solve(s, 0)[1];
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
System.out.println(new Solution().calculate(in.next()));
}
}
}
心之所向,素履以往 生如逆旅,一苇以航
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」