做优惠卷网站倒闭了多少,温州网站建设策划,电子商务加盟网站建设,wordpress设置文章置顶目录 力扣经典150题第五十六题#xff1a;基本计算器示例提示解题思路 力扣经典150题第五十六题#xff1a;基本计算器
给你一个字符串表达式 s #xff0c;请你实现一个基本计算器来计算并返回它的值。
注意:不允许使用任何将字符串作为数学表达式计算的内置函数#xf… 目录 力扣经典150题第五十六题基本计算器示例提示解题思路 力扣经典150题第五十六题基本计算器
给你一个字符串表达式 s 请你实现一个基本计算器来计算并返回它的值。
注意:不允许使用任何将字符串作为数学表达式计算的内置函数比如 eval() 。
示例
示例 1
输入s “1 1” 输出2
示例 2
输入s 2-1 2 输出3
示例 3
输入s “(1(452)-3)(68)” 输出23
提示
1 s.length 3 * 10^5s 由数字、‘’、‘-’、‘(’、‘)’、和 ’ ’ 组成s 表示一个有效的表达式‘’ 不能用作一元运算(例如 “1” 和 “(2 3)” 无效)‘-’ 可以用作一元运算(即 “-1” 和 “-(2 3)” 是有效的)输入中不存在两个连续的操作符每个数字和运行的计算将适合于一个有符号的 32位 整数
解题思路
在进行表达式计算时我们可以使用栈来保存数字和运算符并在遇到右括号时进行计算。具体步骤如下
初始化一个栈 stack 用于保存数字和运算符一个变量 sign 用于保存当前运算的符号默认为1。遍历字符串 s 遇到以下情况进行处理 遇到数字字符时将其转换为数字并添加到当前数字 num 上。遇到 ‘’ 符号时将 sign 设为1。遇到 ‘-’ 符号时将 sign 设为-1。遇到 ‘(’ 符号时将当前数字 num 和运算符 sign 入栈并分别重新置为1。遇到 ‘)’ 符号时从栈中弹出前一个数字和运算符进行运算并将结果加到弹出的数字上。遇到空格时跳过处理。 最后将栈中的所有数字相加得到结果。
以下是Java代码示例
import java.util.Stack;public class BasicCalculator {public int calculate(String s) {StackInteger stack new Stack();int num 0;int sign 1;int result 0;for (int i 0; i s.length(); i) {char c s.charAt(i);if (Character.isDigit(c)) {num num * 10 (c - 0);} else if (c ) {result sign * num;num 0;sign 1;} else if (c -) {result sign * num;num 0;sign -1;} else if (c () {stack.push(result);stack.push(sign);result 0;sign 1;} else if (c )) {result sign * num;num 0;result * stack.pop();result stack.pop();}}result sign * num;return result;}public static void main(String[] args) {BasicCalculator calculator new BasicCalculator();String s1 1 1;String s2 2-1 2 ;String s3 (1(452)-3)(68);System.out.println(calculator.calculate(s1)); // 输出2System.out.println(calculator.calculate(s2)); // 输出3System.out.println(calculator.calculate(s3)); // 输出23}
}
此代码实现了基本计算器功能通过栈来处理运算优先级遇到括号时递归计算括号内的表达式。