首页 > 其他分享 >241. 为运算表达式设计优先级(分治 +记忆化)

241. 为运算表达式设计优先级(分治 +记忆化)

时间:2023-12-14 11:05:09浏览次数:39  
标签:10 优先级 res memo 分治 back 运算符 241 expression


Problem: 241. 为运算表达式设计优先级

给你一个由数字和运算符组成的字符串 expression ,按不同优先级组合数字和运算符,计算并返回所有可能组合的结果。你可以 按任意顺序 返回答案。

生成的测试用例满足其对应输出值符合 32 位整数范围,不同结果的数量不超过 241. 为运算表达式设计优先级(分治 +记忆化)_分治

示例 1:

输入:expression = “2-1-1” 输出:[0,2] 解释:
((2-1)-1) = 0
(2-(1-1)) = 2

示例 2:

输入:expression = “23-45”

输出:[-34,-14,-10,-10,10] 解释:
(2*(3-(45))) = -34
((2
3)-(45)) = -14
((2
(3-4))5) = -10
(2
((3-4)5)) = -10
(((2
3)-4)*5) = 10


文章目录

  • 思路
  • Code


思路

采用分治法将表达式进行递归分解。每次遇到一个运算符,就把表达式分成左右两部分。左部分和右部分分别递归计算,然后根据当前的运算符组合它们的结果。同时使用记忆化来记录每次计算的结果,避免重复计算。

Code

class Solution {
public:
    unordered_map<string,vector<int>> memo ; 
    vector<int> diffWaysToCompute(string expression) {
                int n = expression.size() ; 
        if(memo.count(expression) ) {
            return memo[expression] ; 
        }
        vector<int> res ; // 记录
        for(int i = 0 ; i<n ; i ++){
            char ch = expression[i] ; 
            if( !isdigit(ch)) {
                vector<int> left = diffWaysToCompute(expression.substr(0,i)) ; 
                vector<int> right = diffWaysToCompute(expression.substr(i+1) ) ; 

                for(int a : left ) {
                    for(int b : right) {
                        if(ch =='+') {
                            res.push_back(a+b) ; 
                        }else if(ch == '-') {
                            res.push_back(a-b) ; 
                        }else if(ch == '*') {
                            res.push_back(a*b) ; 
                        }
                    }
                }

            }
        }
        if(res.empty()) {
            res.push_back(stoi(expression) ); 
        }
        memo[expression] = res ; 
        return res ; 

    }
};


标签:10,优先级,res,memo,分治,back,运算符,241,expression
From: https://blog.51cto.com/u_15970235/8815667

相关文章

  • 【POJ 2418】Hardwood Species 题解(映射)
    描述阔叶树是一种植物群,具有宽阔的叶子,结出果实或坚果,通常在冬天休眠。美国的温带气候造就了数百种阔叶树种的森林,这些树种具有某些生物特征。例如,虽然橡树、枫树和樱桃都是硬木树,但它们是不同的物种。所有硬木树种加起来占美国树木的40%。另一方面,软木,或针叶树,从拉丁语的意思是......
  • [持续更新][数据结构][算法]涵盖线性表、栈、链表、队列、图、动态规划、分治递归、回
    备考考点整理内部排序表格树的主要考点二叉树的常考紧紧抓住\(n_0=n_2+1\)\(n=n_0+n_1+n_2...n_m\)\(n=n_1+2*n_2+3*n_3...m*n_m\)+1哈夫曼树没有度为1的结点,也就是\(n_1=0\)完全二叉树常考总结最大岛屿问题(dfs模板)#include<iostream>#include<algorith......
  • C++学习笔记六:运算符(五种基本运算操作,优先级和结合性)
    这一章对操作符进行简单的总结:1.五种基本运算类型:加减乘除,取余add,substract,multiply,divide,modulusintnumber1{2};intnumber2{7};intresult=number1+number2;result=number2-number1;result=number1-number2;result=number1*number2;result=......
  • Hadoop 配置的优先级
    从低到高1.默认配置默认文件文件存放在Hadoop的jar包中的位置core-default.xmlhadoop-common-3.3.6.jar/core-default.xmlhdfs-default.xmlhadoop-hdfs-3.3.6.jar/hdfs-default.xmlyarn-default.xmlhadoop-yarn-common-3.3.6.jar/yarn-default.xmlmapred-d......
  • 2023-2024-5 20232419《网络空间安全导论》第5章预习总结
    内容安全基础信息内容安全总结:信息安全有关内容的获取分析和网络上的,又分别有混合网络社区、跨媒体内容高性能提取,多媒体群体理解技术、多元网络媒体信息数据清洗,和内容中心网络命名攻击和缓存污染等。网络信息内容获取信息内容分析处理网络舆情内容监测预警总结:网络舆......
  • 学期(2023-2024-1) 学号(20232411)《网络空间安全导论》第五周学习总结
    学期(2023-2024-1)学号(20232411)《网络空间安全导论》第五周学习总结教材学习内容总结本周我学习了《网络空间安全导论》的第五章,其主要讲述了内容安全的概述,意义及其面对的主要威胁,以及信息内容的分析与处理方法,网络舆情系统的功能及应用。在学习过程中,我总结了如下要点,以思维导......
  • C语言中的运算符优先级
    C语言中的运算符优先级前言这几天在调试一个程序,遇到了一个bug,就是需要读取寄存器的数据。该数据是一个16bit的数据,按照高8位一个byte和低8位一个byte分别存放在了不同的寄存器地址中。但是在我读取数据的时候,总是会出现数据不符合预期的情况。在程序中是这样子的,读取的高8位数......
  • 20232413《网络》第五周学习总结
    教材学习内容总结教材学习中的问题和解决方案问题一:访问控制和身份验证问题解决方案:实施强大的身份验证机制,如多因素身份验证,限制访问权限,确保只有授权用户能够访问敏感数据。问题二:网络漏洞和攻击问题解决方案: 及时更新操作系统和应用程序,使用防火墙、入侵检测和入侵防御......
  • 支持优先级继承的RT-mutex子系统
    https://www.kernel.org/doc/html/v6.6/locking/rt-mutex.htmlRT-mutex子系统支持PIRT-mutexes与优先级继承一起使用,以支持PI-futexes,从而使pthread_mutex_t支持优先级继承属性(PTHREAD_PRIO_INHERIT)。[有关PI-futexes的更多详细信息,请参见轻量级PI-futexes。]这项技术是在-rt......
  • 一些神奇的运算优先级
    首先来看这个代码intf(int*p){ inty=(*p)*2; (*p)++; returny;}intmain(){ intx=10; cout<<x+f(&x); return0;}这个代码输出的是31,感觉似乎f加了一个括号?那再看看这个代码intf(int*p){ inty=(*p)*2; (*p)++; returny;}intmain(){ intx=10......