227. 基本计算器 II-栈
Posted hequnwang10
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了227. 基本计算器 II-栈相关的知识,希望对你有一定的参考价值。
一、题目描述
给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。
整数除法仅保留整数部分。
你可以假设给定的表达式总是有效的。所有中间结果将在 [-231, 231 - 1] 的范围内。
注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval() 。
示例 1:
输入:s = "3+2*2"
输出:7
示例 2:
输入:s = " 3/2 "
输出:1
示例 3:
输入:s = " 3+5 / 2 "
输出:5
二、解题
栈
这里主要是处理 * 和 / ,+ 就是将值压栈, - 就是将负值压栈,遇到 * 将两个元素相乘然后压栈,遇到 / 将两个元素相除压栈
class Solution
public int calculate(String s)
//使用栈 这里主要是处理 * 和 / ,+ 就是将值压栈 - 就是将负值压栈,遇到 * 将两个元素相乘然后压栈,遇到 / 将两个元素相除压栈
//这个栈就是存数,一个一个的数
Deque<Integer> stack = new LinkedList<>();
int curnum = 0;
char presign = '+';
char[] schar = s.toCharArray();
int length = s.length();
for(int i = 0;i<length;i++)
//取值
if(Character.isDigit(schar[i]))
curnum = curnum * 10 + schar[i] - '0';
//如果是运算符
if(!Character.isDigit(schar[i]) && schar[i] != ' ' || i == length - 1)
switch (presign)
case '+' :
stack.push(curnum);
break;
case '-' :
stack.push(-curnum);
break;
case '*' :
stack.push(stack.pop() * curnum);
break;
case '/' :
stack.push(stack.pop() / curnum);
break;
default :
presign = schar[i];
curnum = 0;
//取栈中的元素
int res = 0;
while(!stack.isEmpty())
res += stack.pop();
return res;
时间复杂度:O(n);
空间复杂度:O(n)。
以上是关于227. 基本计算器 II-栈的主要内容,如果未能解决你的问题,请参考以下文章