题目描述
输入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);
<

本文介绍了一道编程题目,涉及处理包含MIN和MAX运算的四则运算表达式。题目要求输入合法的表达式,通过MIN和MAX运算求解。解题思路涉及消除运算符的优先级,使用栈来处理加减乘除操作,并处理括号内的表达式。提供了JS实现的代码片段,可以直接在指定平台上运行。
最低0.47元/天 解锁文章
168万+

被折叠的 条评论
为什么被折叠?



