给定一串数字和运算符,返回所有可能的结果,有效的运算符是+,
来源:互联网 发布:linux虚拟机kvm怎么用 编辑:程序博客网 时间:2024/05/01 20:33
本体源自leetcode
--------------------------------------------------------
思路:
递归: 遍历字符串遇到 运算符。递归求出运算符前面的结果。在递归求出运算符后的结果。在互相做运算
代码:
vector<int> diffWaysToCompute(string input) { vector<int> result; int len=input.size(); for(int i=0;i<len;i++){ char cur=input[i]; if(cur=='+'||cur=='-'||cur=='*'){ vector<int> pre=diffWaysToCompute(input.substr(0,i)); //计算运算符前半部分的结果 vector<int> post=diffWaysToCompute(input.substr(i+1)); //运算符后半部分的结果 for(auto i:pre){ for(auto j: post){ if(cur=='+'){ result.push_back(i+j); }else if(cur=='-'){ result.push_back(i-j); }else if(cur=='*'){ result.push_back(i*j); } } } } } if(result.empty()){ result.push_back(stoi(input)); } return result; }
思路2 优化上述递归
1 递归包括很多重复运算。因此用动态规划来消除重复运算
用一个<string,vector<int>> map 做dp .
代码:
vector<int> diffWaysToCompute(string input) { map<string,vector<int>> dp; return compute(input,dp); } vector<int> compute(string input,map<string,vector<int>> &dp){ vector<int> result; int len=input.size(); for(int i=0;i<len;i++){ char cur=input[i]; if(cur=='+'||cur=='-'||cur=='*'){ vector<int> pre; vector<int> post; string str=input.substr(0,i); if(dp.find(str)!=dp.end()){ pre=dp[str]; }else{ pre=compute(str,dp); } str=input.substr(i+1); if(dp.find(str)!=dp.end()){ post=dp[str]; }else{ post=compute(str,dp); } for(auto i:pre){ for(auto j: post){ if(cur=='+'){ result.push_back(i+j); }else if(cur=='-'){ result.push_back(i-j); }else if(cur=='*'){ result.push_back(i*j); } } } } } if(result.empty()){ result.push_back(stoi(input)); } dp[input]=result; return result; }
阅读全文
0 0
- 给定一串数字和运算符,返回所有可能的结果,有效的运算符是+,
- js运算符(是用来返回结果的)
- 复合运算符可能产生的结果
- 给定不同数字的集合,返回所有可能的排列。
- 给定可能包含重复的数字的集合,返回所有可能的唯一排列。
- JavaScript的typeof运算符的可能结果有哪些?
- JavaScript的typeof运算符的可能结果
- 给定一个数字字符串,返回数字可能表示的所有可能的字母组合。数字与字母的对应关系和手机按键对应。
- 给定一串数字求连续的最大和
- Java运行结果返回的是@加一串乱七八糟时
- 比较运算符的结果一定是boolean类型
- javaScript 运算符 && 和 || 的返回值
- 两个数的运算,结果保留n位有效数字,不足补0。
- 给定两个整数n和k,返回1 ... n中k个数的所有可能组合。
- C语言-条件运算符 ,返回的是一个值
- 给定两个int a和b,不使用if-else等比较和判断运算符,请返回较大的一个数。若两数相同则返回任意一个
- 给定一个可能包含重复的整数的集合,S返回所有可能的子集。
- 服务器返回一串奇怪的数字?!
- CentOS 7安装python3.6
- 升级到ckplayerX
- 6.1 YARN的架构
- 检索字符
- basically setting up a Django production server
- 给定一串数字和运算符,返回所有可能的结果,有效的运算符是+,
- leetcode 65. Valid Number
- Spark学习之RDD的概念
- 算法基础-线性代数-行列式
- uva 670 The dog task
- VMware虚拟机桥接方式与真实主机共享上网
- OpenCV 2.4.9 +VS2013 开发环境配置
- 分布式集群系统下的高可用session解决方案
- 初学Spring Boot遇到Whitelabel Error Page的解决办法