题目描述
输入4则运行算表达式, 额外再定义了两种运算操作
MIN(a,b) 计算最小值
MAX(a,b) 计算最大值
表达式不包括空格, 可以使用()设置优先级, 数字都是整数, 且输入一定合法, 不需要校验
例如 MIN(1,(2+3)*4)+(1+2)*3 的值为10
思路
- 遇到加减操作, 它之前的操作的优先级不会比现在低, 可以都消除掉.
而当前的加减操作还不能消,先存到栈中 - 遇到乘除操作, 只能先消除掉它之前的乘除操作
- 遇到圆括号, 整个圆括号内的表达式最终可以消除1个值
js实现
打开 https://js.do/, 将以下代码复杂上去, 就可以直接运行了
// 用于字符串转整数
const CharCode_0 = '0'.charCodeAt(0);
const CharCode_9 = '9'.charCodeAt(0);
// 扩展数组接口
Array.prototype.peek = function () {
return this[this.length-1];
}
const operations = {
'+': function(a, b) {
return a + b;
},
'-': function(a, b) {
return a - b;
},
'*': function(a, b) {
return a * b;
},
'/': function(a, b) {
return Math.floor(a / b);
},
'I': function(a, b) {
// MIN
return Math.min(a, b);
},
'A': function(a, b) {
// MAX
return Math.max(a, b);
},
}
// 简化字符遍历
class StringBuffer {
constructor(str){
this.str = str;
this.pos = 0;
this.len = str.length;
}
hasNext() {
return this.pos < this.len;
}
peek() {
return this.str.charAt(this.pos);
}