华为OD机试真题(Java),四则运算(100%通过+复盘思路)
一、题目描述
输入一个表达式(用字符串表示),求这个表达式的值。
保证字符串中的有效字符包括[‘0’-‘9’],‘+’,‘-’, ‘*’,‘/’ ,‘(’, ‘)’,‘[’, ‘]’,‘{’ ,‘}’
。且表达式一定合法。
数据范围:表达式计算结果和过程中满足∣val∣≤1000
,字符串长度满足 1≤n≤1000
。
二、输入描述
输入一个算术表达式。
三、输出描述
得到计算结果。
四、解题思路
- 读取输入的算术表达式字符串 s;
- 初始化变量 num1 为0,用于保存当前运算结果;
- 初始化变量 o1 为1,表示当前运算符的符号,默认为正号;
- 初始化变量 num2 为1,用于保存当前数字的值;
- 初始化变量 o2 为1,表示当前乘除运算符的符号,默认为正号;
- 创建一个栈 stk,用于保存计算过程中的状态;
- 遍历表达式字符串 s的每个字符 c:
- 若 c 是数字字符,则将连续的数字字符解析成一个整数 cur,并根据 o2 的符号进行乘除运算,更新 num2 的值;
- 若 c 是乘除运算符字符 * 或 /,更新 o2 的符号;
- 若 c 是左括号字符 ( 或 { 或 [,将当前的运算结果和运算符状态压入栈中,并初始化 num1、o1、num2、o2 的值;<