【LeetCode】150. Evaluate Reverse Polish Notation

来源:互联网 发布:青少年行知实践园的题 编辑:程序博客网 时间:2024/06/05 07:33

提交结果: 102 ms,84%
这题正常思路如下代码所示。需要注意的是负数。可以进一步,将三个函数合成一个,判断每次

测试安全:["3","-4","+"]
var evalRPN = function(tokens) {    var nums = [];    for(var i = 0, num1, num2; i<tokens.length; i++){        if(!isop(tokens[i])){            nums.push(tokens[i]);        }else{            num1 = nums.pop();            num2 = nums.pop();            nums.push( doop(num2,num1,tokens[i]) );        }    }    return parseInt(nums.pop());};function isop(a){    if(a == "+" ||a == "-" ||a == "*" ||a == "/" ){        return true;    }else{        return false;    }}function doop(num2,num1,token){    num2 = num2 - "0";    num1 = num1 - "0";    // console.log(num2,token,num1);    switch (token){            case "+":                return num2 + num1;            break;            case "-":                return num2 - num1;            break;            case "*":                return num2 * num1;            break;            case "/":                return parseInt(num2 / num1);            break;    }}

方法二:实际效率比前一种方法竟然低。可能是乘除法占用时间比较长的缘故。

var evalRPN = function(tokens) {    if(tokens === null || tokens.length === 0){return null;}    var result = [];    for(var i = 0; i < tokens.length; i++){        if(tokens[i].charAt(0)==="-"&&tokens[i].length > 1){tokens[i] = " "+tokens[i];}        switch(tokens[i]){            default: result.push(parseInt(tokens[i])); break;            case "+": result.push(result.pop()+result.pop()); break;                 case "*": result.push(result.pop()*result.pop()); break;            case "-": result.push(-1*result.pop() - (-1)*result.pop()); break;            case "/": result.push( parseInt(1/( result.pop()/result.pop() )) ); break;        }    }    return result.pop();};
原创粉丝点击