本文主要是介绍【栈】224. 基本计算器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
224. 基本计算器
解题思路
- 首先将输入的字符串转换为字符队列。
- 调用 helper() 方法,将字符队列作为参数进行计算。
- 在 helper() 方法中,创建一个栈来存储中间计算结果,初始化符号为 ‘+’,初始化数字为 0。
- 循环处理字符队列中的每个字符。
- 如果当前字符是数字,则将其与之前的数字组合成完整的数字。
- 如果遇到左括号,则开始递归计算括号内的表达式值。
- 如果当前字符不是数字且不是空格,或者队列已经为空,则说明遇到了一个完整的数字和一个符号,根据之前记录的符号对数字进行相应的操作,并将结果入栈。
- 如果遇到右括号,则结束当前递归并返回结果。
- 最后,计算栈中所有元素的和作为最终结果,并返回。
class Solution {public int calculate(String s) {Queue<Character> queueS = new LinkedList<>();for(char c:s.toCharArray()){queueS.add(c);}return helper(queueS);}private int helper(Queue<Character> s){Stack<Integer> stack = new Stack<Integer>();// 存储中间结果char sign = '+';int num = 0;while(!s.isEmpty()){char c = s.poll();// 出队字符if(Character.isDigit(c)){// 如果是数字 num = num * 10 + Character.getNumericValue(c);}// 遇到左括号开始递归计算numif(c == '('){num = helper(s);}// 如果是运算符或者是空格 或者是字符栈为空if(!Character.isDigit(c) && c != ' ' || s.isEmpty()){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);}num = 0;sign = c;}// 遇到右括号返回递归结果if(c == ')'){break;}}int res = 0;for(int i : stack){res += i;// 计算最后结果}return res;}
}
这篇关于【栈】224. 基本计算器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!