> 文章列表 > JAVA练习110- 基本计算器 II

JAVA练习110- 基本计算器 II

JAVA练习110- 基本计算器 II

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

4月17日练习内容


提示:以下是本篇文章正文内容,下面案例可供参考

一、题目-基本计算器 II

1.题目描述

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

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

你可以假设给定的表达式总是有效的。所有中间结果将在 [-231, 231 - 1] 的范围内。

注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval() 。

示例 1:

输入:s = "3+2*2"
输出:7

示例 2:

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

示例 3:

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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/basic-calculator-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2.思路与代码

2.1 思路

1.计算器类型题目,使用栈

2.遍历字符串,判断该字符是不是+,-,*,/的字符,如果不是,则将其转为数字

3.如果是,则进入switch循环,计算结果,并将计算的结果入栈

4.最后遍历栈,将栈内数字累加,输出最后结果

2.2 代码

代码如下(示例):

class Solution {public int calculate(String s) {//创建栈Deque<Integer> stack = new ArrayDeque<Integer>();char preSign = '+';int num = 0;int n = s.length();//遍历字符串for (int i = 0; i < n; ++i){//如果不是+、-、*、/,则转为数字if (Character.isDigit(s.charAt(i))) {num = num * 10 + s.charAt(i) - '0';}//如果是+,-,*,/if (!Character.isDigit(s.charAt(i)) && s.charAt(i) != ' ' || i == n - 1) {switch (preSign) {case '+':stack.push(num);break;case '-':stack.push(-num);break;case '*':stack.push(stack.pop() * num);break;default:stack.push(stack.pop() / num);}preSign = s.charAt(i);num = 0;}}//将计算结果出栈,计算最后总值int ans = 0;while (!stack.isEmpty()) {ans += stack.pop();}return ans;}
}

总结

提示:这里对文章进行总结: