为运算表达式设计优先级

た 入场券 2022-12-24 04:53 299阅读 0赞

leetcode 241题 [medium]
中:为运算表达式设计优先级
英:Different Ways to Add Parentheses
在这里插入图片描述

题解

  1. 核心:递归分治 + 记事本优化
  2. 实现

    1. /** * @param {string} input * @return {number[]} */
    2. var diffWaysToCompute = function(input) {
    3. /** * 递归分治法 + 记事本优化 */
    4. // 预处理 -- 无
    5. // 记事本
    6. let record = { }; // 键:表达式字符串, 值其可能的运算组合结果列表
    7. // 递归函数
    8. function recurse(_exp){
    9. // 预处理
    10. if(!Number.isNaN(Number(_exp))) return [Number(_exp)]; // 不是表达式,直接返回
    11. if(record[_exp]) return record[_exp]; // 读记事本
    12. // let result = new Set(); // 当前所有可能的运算结果,Set去重,后边转数组
    13. let result = []; // 题目未去重
    14. let opMatch = [..._exp.matchAll(/[\+|\-|\*]/g)];
    15. for(let i=0, len=opMatch.length; i<len; i++){
    16. let currOp = opMatch[i][0];
    17. let currOpIndex = opMatch[i].index;
    18. let left = recurse(_exp.slice(0, currOpIndex));
    19. let right = recurse(_exp.slice(currOpIndex+1));
    20. for(let li=0; li<left.length; li++){
    21. for(let ri=0; ri<right.length; ri++){
    22. result.push(eval(left[li] + ' ' + currOp + ' ' + right[ri]));
    23. }
    24. }
    25. }
    26. // 写记事本
    27. // result = [...result]; // 转数组
    28. record[_exp] = result;
    29. return result;
    30. }
    31. return recurse(input);
    32. };

发表评论

表情:
评论列表 (有 0 条评论,299人围观)

还没有评论,来说两句吧...

相关阅读