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;}
}
总结
提示:这里对文章进行总结: