自己做整个网站的流程,网络课程系统网站建设费用,做单页网站盈利案例,网站建设相关知识博客基本计算器
给你一个字符串表达式 s #xff0c;请你实现一个基本计算器来计算并返回它的值。
**注意:**不允许使用任何将字符串作为数学表达式计算的内置函数#xff0c;比如 eval() 。
示例 1#xff1a;
输入#xff1a;s “1 1” 输出#xff1a;2
示例 2…基本计算器
给你一个字符串表达式 s 请你实现一个基本计算器来计算并返回它的值。
**注意:**不允许使用任何将字符串作为数学表达式计算的内置函数比如 eval() 。
示例 1
输入s “1 1” 输出2
示例 2
输入s 2-1 2 输出3
示例 3
输入s “(1(452)-3)(68)” 输出23
解题思路
要实现一个基本计算器只有加减法和括号来计算给定的字符串表达式可以使用栈来处理括号和运算优先级问题类似 逆波兰表达式只不过多了一些判断。
Java实现
public class BasicCalculator {public int calculate(String s) {StackInteger stack new Stack();int result 0;int num 0;int sign 1; // 1 表示正号, -1 表示负号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 )) {// 先将当前 num 加到 resultresult sign * num;num 0;// 弹出栈顶符号并与当前结果相乘result * stack.pop();// 弹出栈顶的之前的结果并相加result stack.pop();}}// 最后一次操作后的结果if (num ! 0) {result sign * num;}return result;}public static void main(String[] args) {BasicCalculator calculator new BasicCalculator();System.out.println(calculator.calculate(1 1)); // 输出: 2System.out.println(calculator.calculate( 2-1 2 )); // 输出: 3System.out.println(calculator.calculate((1(452)-3)(68))); // 输出: 23}
}
时间空间复杂度
时间复杂度: O(n)其中 n 是字符串的长度。每个字符只处理一次。空间复杂度: O(n)用于存储栈的空间最坏情况下栈的深度与字符串长度成正比