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. 为运算表达式设计优先级(动态规划)相关推荐

  1. [leetcode]241. 为运算表达式设计优先级

    1.提交的代码,分治 class Solution {map< pair<int,int>, vector<int> >hash; // 备忘录 key: < ...

  2. 力扣- -241.为运算表达式设计优先级

    力扣- -241.为运算表达式设计优先级(分治算法) 文章目录 力扣- -241.为运算表达式设计优先级(分治算法) 一.题目描述 二.分析 三.代码 四.优化 一.题目描述 二.分析 看到这道题的第 ...

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

    241. 为运算表达式设计优先级 给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果.你需要给出所有可能的组合的结果.有效的运算符号包含 +, - 以及 * . 示例 ...

  4. leetcode 241. Different Ways to Add Parentheses | 241. 为运算表达式设计优先级(Java)

    题目 https://leetcode.com/problems/different-ways-to-add-parentheses/ 题解 参考:C++ Solution [Faster than ...

  5. c语言符号运算优先级6,c语言运算符号的优先级

    c语言运算符号的优先级 本文来自百度搜索只为查看方便 优先级等级口诀: 圆方括号.箭头一句号, 自增自减非反负.针强地址长度, 乘除,加减,再移位, 小等大等.等等不等, 八位与,七位异,六位或,五与 ...

  6. 编程优先级c语言,C语言中运算符号的优先级

    C语言中运算符号的优先级 发布时间:2020-06-20 16:13:39 来源:亿速云 阅读:117 作者:Leah 这期内容当中小编将会给大家带来有关C语言中运算符号的优先级,以专业的角度为大家分 ...

  7. 四则混合运算表达式分析程序的原理及其实现

    意义: 四则混合运算表达式可以看作一定语言中的表达式分析及求值,虽然它很小,却是一个语法分析的很好的例子! 一.目标:可以对输入的四则混合运算表达式进行分析,并求出其结果.程序须支持:整数及小数运算. ...

  8. 算数四则混合运算表达式求值

    算数混合四则运算求值 [问题] 利用算符优先关系,实现对算术四则混合运算表达式的求值 [要求] 输入的形式:表达式,例如2*(3+4) 包含的运算符只能有'+' .'-' .'*' .'/' .'(' ...

  9. 使用堆栈实现对算数四则混合运算表达式的求值(C语言)

    使用堆栈实现对算数四则混合运算表达式的求值(C语言) 很方便的目录 使用堆栈实现对算数四则混合运算表达式的求值(C语言) 一.问题分析 基本思路 算符优先级构建 二.算法描述 算法描述 堆栈运算过程的 ...

最新文章

  1. 在redhat6.4下安装 Oracle® Database 11g Release 2
  2. idea中配置xml不自动提示解决方案
  3. Webx示例-PetStore分析1
  4. POJ-1414 Life Line (暴力搜索)
  5. Cocopods的升级错误解决
  6. 北京供销大数据集团发布SinoBBD Cloud 一体化推动产业云发展
  7. Java基础11-封装(思想、访问权限、this、构造方法)
  8. python直接连接oracle_python连接oracle
  9. 从国内的996,到美国的朝9晚5,真的这么惬意吗?
  10. 新疆微软.NET技术俱乐部7月活动图文报道
  11. Lumia 830 win10m 启用触摸按键
  12. 超详细的计算机视觉竞赛汇总
  13. java实用教程第五版_java2实用教程(第5版)重要点及遗漏点(一)
  14. YTU OJ 2476 C++习题 继承与组合
  15. (三)DDD上下文映射图——老师,我俩可是纯洁的男女关系!
  16. React使用cra创建项目,开启装饰器
  17. ABBYY FineReader:PDF转换、一键OCR、图片转文字等,OCR识别一遍帮你搞定。
  18. NLP学习笔记——情感分析一 (简介)
  19. Python机器学习基础篇三《无监督学习与预处理》
  20. php写excel文件_利用PHPExcel实现Excel文件的写入和读取

热门文章

  1. 51单片机50个实例代码_【附代码】51单片机电子密码锁教程
  2. 苹果应用上架遇到的问题(2017年4月27日)
  3. C++远航之封装篇——类外定义和::
  4. linux unix shell programming,UnixampLinux Shell Programming I.ppt
  5. 分词相关技术(转载)
  6. 五分钟读懂UML类图
  7. 高可用+负载均衡 方案
  8. 读书笔记2013第18本:《像外行一样思考,像专家一样实践》
  9. java 打印三维数组_Java基础第三天_数组
  10. 单纯形法求最小值的检验数_【运筹学】单纯形法(笔记和思考)