题解 | #表达式求值#递归法

表达式求值

https://www.nowcoder.com/practice/9566499a2e1546c0a257e885dfdbf30d

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
    // Write your code here
    const calculate = (str, left, right) => {
        let option = "+";
        let number = 0;
        let arr = [];

        for (let i = left; i <= right; i++) {
            if (!isNaN(str[i])) {
                // 判断是数字
                number = number * 10 + parseInt(str[i]);
            }
            if (str[i] === "(") {
                let layer = 0;
                let j = i;
                while (j <= right) {
                    if (str[j] === "(") layer++;
                    else if (str[j] === ")") {
                        layer--;
                        if (layer === 0) break;
                    }
                    j++;
                }
                number = calculate(str, i + 1, j - 1);
                i = j + 1;
            }
            if (isNaN(str[i]) || i === right) {
                switch (option) {
                    case "+":
                        arr.push(number);
                        break;
                    case "-":
                        arr.push(-number);
                        break;
                    case "*":
                        let final = arr.pop() * number;
                        arr.push(final);
                        break;
                    case "/":
                        final = arr.pop() / number;
                        arr.push(final);
                        break;
                }
                option = str[i];
                number = 0;
            }
        }
        let sum = 0;
        for (const k of arr) sum += parseInt(k);
        return sum;
    };

    while ((line = await readline())) {
        const n = line.length;
        console.log(calculate(line, 0, n - 1));
    }
})();

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务