今天做的面试题,网上好像没看到这种写法,记录一下
就简单测了一下,如有错误望指正
逆波兰表达式
解释:摘自百度百科
规律
1、表达式要么只有一个数字,要么大于等于三个数字
2、逆波兰表达式,第一个出现的运算符和它的前两个字符一定组成一个表达式
代码实现
function expr(arr){
let reg=/[\+,\-,\*,\/,\%]/; //-一定要转义,不然不能识别
if(arr.length>1){ //length要么1要么一定大于等于3
for(let i=2;i<arr.length;i++){ //第一个数一定是数字。
if(reg.test(arr[i])){ //判断是否是运算符,
let x = arr[i-2]+arr[i]+arr[i-1]; //拼接字符
//eval字符串转表达式运算返回运算值
arr.splice(i-2,3,(eval(x)+'')); //删除i-2到i的三项并用计算值替代
// console.log(arr[i-2]);
expr(arr); //直到只有一个数,即得出结果返回
}
}
}
return arr;
}
//输入值为‘2 3 4 + *’类似的空格分割的表达式字符串
function handleExpr(s){
let arr = s.split(' ');
let a = expr(arr); //返回值是数组
console.log(a[0]);
return a[0];
}