题目:基本计算器Ⅰ(hard)
给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。
示例 1:
输入:s = “1 + 1”
输出:2
示例 2:
输入:s = " 2-1 + 2 "
输出:3
示例 3:
输入:s = “(1+(4+5+2)-3)+(6+8)”
输出:23
该题只包含+、-运算,所以不用考虑运算的优先级,从左往右计算即可,无非是遇到括号先计算括号里的。
以上图为例,从左往右进行遍历即可。res代表从左往右的部分结果和。从左往右依次遍历知道遇到下一个左括号为止,这个过程中的所有和这里用res变量记录。sign代表+或者-。
具体的算法步骤如下:
从左往右依次遍历。
对当前遍历到的字符进行判断,如果是数字,则用num变量进行存储(这里有一个问题,进行运算的数字可能是大于10的数字,所以我们需要滚动计算num值,即对num变量不断乘以10再加上当前位)
如果是运算符,则代表当前找到了一个操作数。我们需要将他加到res中去。
如果遇到的是左括号‘(’。则将之前的res和sign入栈,res置0,sign置1,相当于开展新一轮的子计算。
如果遇到右括号‘)’则我们用子计算的res结果加上站内保存的上一级的res结果即可。
class Solution {
public int calculate(String s) {
int res=0;//存储部分计算和结果
int num=