LeetCode 241. 为运算表达式设计优先级(动态规划)
1. 解题
给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果。
你需要给出所有可能的组合的结果。有效的运算符号包含 +, - 以及 *
。
示例 1:
输入: "2-1-1"
输出: [0, 2]
解释:
((2-1)-1) = 0
(2-(1-1)) = 2示例 2:
输入: "2*3-4*5"
输出: [-34, -14, -10, -10, 10]
解释:
(2*(3-(4*5))) = -34
((2*3)-(4*5)) = -14
((2*(3-4))*5) = -10
(2*((3-4)*5)) = -10
(((2*3)-4)*5) = 10
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/different-ways-to-add-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. DP解题
dp[i][j]
存储区间[i,j]
内可能的结果数值- 先初始化
dp[i][i],dp[i][i+1]
- 然后按照区间长度 len 不断加大
dp[i][i+len] = sum(dp[i][j] op dp[j+1][i+len])
j 在区间内遍历,左右的数组合进行运算的值,存入dp[i][i+len]
class Solution {public:vector<int> diffWaysToCompute(string input) {int i, j, k, num=0;vector<int> arr;//数字存起来vector<char> op;//操作符存起来for(i = 0; i < input.size(); ++i){if(!isdigit(input[i])){arr.push_back(num);op.push_back(input[i]);num = 0;}elsenum = num*10+input[i]-'0';}arr.push_back(num);//最后一个数字int n = arr.size();vector<vector<vector<int>>> dp(n,vector<vector<int>>(n));for(i = 0; i < n-1; ++i){dp[i][i] = {arr[i]};//初始化dp[i][i]if(op[i]=='+')dp[i][i+1] = {arr[i]+arr[i+1]};//初始化dp[i][i+1]else if(op[i]=='-')dp[i][i+1] = {arr[i]-arr[i+1]};else if(op[i]=='*')dp[i][i+1] = {arr[i]*arr[i+1]};}dp[n-1][n-1] = {arr[n-1]};//初始化dp[i][i]for(int len = 2; len < n; ++len){ //按长度dpfor(i = 0; i < n-len; ++i){ //左端点for(j = i; j < i+len; ++j){ //中间端点for(int dl : dp[i][j]){ //左边的数值for(int dr : dp[j+1][i+len])//左边的数值if(op[j]=='+')dp[i][i+len].push_back(dl+dr);else if(op[j]=='-')dp[i][i+len].push_back(dl-dr);else if(op[j]=='*')dp[i][i+len].push_back(dl*dr);}}}}sort(dp[0][n-1].begin(),dp[0][n-1].end());return dp[0][n-1];}
};
LeetCode 241. 为运算表达式设计优先级(动态规划)相关推荐
- [leetcode]241. 为运算表达式设计优先级
1.提交的代码,分治 class Solution {map< pair<int,int>, vector<int> >hash; // 备忘录 key: < ...
- 力扣- -241.为运算表达式设计优先级
力扣- -241.为运算表达式设计优先级(分治算法) 文章目录 力扣- -241.为运算表达式设计优先级(分治算法) 一.题目描述 二.分析 三.代码 四.优化 一.题目描述 二.分析 看到这道题的第 ...
- 241. 为运算表达式设计优先级
241. 为运算表达式设计优先级 给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果.你需要给出所有可能的组合的结果.有效的运算符号包含 +, - 以及 * . 示例 ...
- leetcode 241. Different Ways to Add Parentheses | 241. 为运算表达式设计优先级(Java)
题目 https://leetcode.com/problems/different-ways-to-add-parentheses/ 题解 参考:C++ Solution [Faster than ...
- c语言符号运算优先级6,c语言运算符号的优先级
c语言运算符号的优先级 本文来自百度搜索只为查看方便 优先级等级口诀: 圆方括号.箭头一句号, 自增自减非反负.针强地址长度, 乘除,加减,再移位, 小等大等.等等不等, 八位与,七位异,六位或,五与 ...
- 编程优先级c语言,C语言中运算符号的优先级
C语言中运算符号的优先级 发布时间:2020-06-20 16:13:39 来源:亿速云 阅读:117 作者:Leah 这期内容当中小编将会给大家带来有关C语言中运算符号的优先级,以专业的角度为大家分 ...
- 四则混合运算表达式分析程序的原理及其实现
意义: 四则混合运算表达式可以看作一定语言中的表达式分析及求值,虽然它很小,却是一个语法分析的很好的例子! 一.目标:可以对输入的四则混合运算表达式进行分析,并求出其结果.程序须支持:整数及小数运算. ...
- 算数四则混合运算表达式求值
算数混合四则运算求值 [问题] 利用算符优先关系,实现对算术四则混合运算表达式的求值 [要求] 输入的形式:表达式,例如2*(3+4) 包含的运算符只能有'+' .'-' .'*' .'/' .'(' ...
- 使用堆栈实现对算数四则混合运算表达式的求值(C语言)
使用堆栈实现对算数四则混合运算表达式的求值(C语言) 很方便的目录 使用堆栈实现对算数四则混合运算表达式的求值(C语言) 一.问题分析 基本思路 算符优先级构建 二.算法描述 算法描述 堆栈运算过程的 ...
最新文章
- 在redhat6.4下安装 Oracle® Database 11g Release 2
- idea中配置xml不自动提示解决方案
- Webx示例-PetStore分析1
- POJ-1414 Life Line (暴力搜索)
- Cocopods的升级错误解决
- 北京供销大数据集团发布SinoBBD Cloud 一体化推动产业云发展
- Java基础11-封装(思想、访问权限、this、构造方法)
- python直接连接oracle_python连接oracle
- 从国内的996,到美国的朝9晚5,真的这么惬意吗?
- 新疆微软.NET技术俱乐部7月活动图文报道
- Lumia 830 win10m 启用触摸按键
- 超详细的计算机视觉竞赛汇总
- java实用教程第五版_java2实用教程(第5版)重要点及遗漏点(一)
- YTU OJ 2476 C++习题 继承与组合
- (三)DDD上下文映射图——老师,我俩可是纯洁的男女关系!
- React使用cra创建项目,开启装饰器
- ABBYY FineReader:PDF转换、一键OCR、图片转文字等,OCR识别一遍帮你搞定。
- NLP学习笔记——情感分析一 (简介)
- Python机器学习基础篇三《无监督学习与预处理》
- php写excel文件_利用PHPExcel实现Excel文件的写入和读取
热门文章
- 51单片机50个实例代码_【附代码】51单片机电子密码锁教程
- 苹果应用上架遇到的问题(2017年4月27日)
- C++远航之封装篇——类外定义和::
- linux unix shell programming,UnixampLinux Shell Programming I.ppt
- 分词相关技术(转载)
- 五分钟读懂UML类图
- 高可用+负载均衡 方案
- 读书笔记2013第18本:《像外行一样思考,像专家一样实践》
- java 打印三维数组_Java基础第三天_数组
- 单纯形法求最小值的检验数_【运筹学】单纯形法(笔记和思考)