Given a string of numbers and operators,

return all possible results from computing all the different possible ways

to group numbers and operators. The valid operators are+- and *.

Example 1

Input: "2-1-1".

((2-1)-1) = 0
(2-(1-1)) = 2

Output: [0, 2]

Example 2

Input: "2*3-4*5"

(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

Output: [-34, -14, -10, -10, 10]

这里的主要思想是讲左右的子串分别算出来之后,再做全排列就行了,可能有很所重复计算所以说效率比较低

 class Solution {
public:
vector<int> diffWaysToCompute(string input) {
vector<int> result;
int length = input.length();
for(int i = ; i < length; ++i){
char c = input[i];
if(c == '+' || c == '-' || c == '*'){
string inputLeft = input.substr(, i);
string inputRight = input.substr(i+);
vector<int>leftResult = diffWaysToCompute(inputLeft);
vector<int>rightResult = diffWaysToCompute(inputRight);
for(int j = ; j < leftResult.size(); ++j){
for(int k = ; k < rightResult.size(); ++k){
if(c == '+')
result.push_back(leftResult[j] + rightResult[k]);
else if(c == '-')
result.push_back(leftResult[j] - rightResult[k]);
else if(c == '*')
result.push_back(leftResult[j] * rightResult[k]);
}
}
}
}
if(result.empty())//这一步主要的作用是讲分治得到的最后的字符转换成数字
result.push_back(stoi(input));
return result;
}
};

java版本如下所示:

 public class Solution {
public List<Integer> diffWaysToCompute(String input) {
ArrayList<Integer> ret = new ArrayList<Integer>();
for(int i = 0; i < input.length(); ++i){
char c = input.charAt(i);
if(c == '+' || c == '-' || c == '*'){
List<Integer> leftRet = diffWaysToCompute(input.substring(0, i));
List<Integer> rightRet = diffWaysToCompute(input.substring(i+1, input.length()));
for(int left : leftRet){
for(int right : rightRet){
if(c == '+'){
ret.add(left + right);
}else if(c == '-'){
ret.add(left - right);
}else{
ret.add(left * right);
}
}
}
}
}
if(ret.isEmpty()){
ret.add(Integer.parseInt(input));
}
return ret;
}
}

最新文章

  1. 《Unix/Linux网络日志分析与流量监控》获2015年度最受读者喜爱的IT图书奖
  2. c语言冒泡排序
  3. android java substring说明
  4. centos 服务器内存管理
  5. JavaScript 全栈工程师培训教程(来自阮一峰)
  6. Leetcode 86. Unique Binary Search Trees
  7. ubuntu下安装TexLive和Texmaker
  8. Android GPS 临近触发
  9. HMMPfam的安装使用手记(转载)
  10. PagerSlidingTabStrip 高亮选中标题
  11. Web挖掘技术
  12. JavaScript 判断对象是否为空
  13. hdu 3309 Roll The Cube ( bfs )
  14. 对SVN的落地与实践总结
  15. base标签浏览器兼容问题
  16. 基于 Python 和 Pandas 的数据分析(6) --- Joining and Merging
  17. 【leetcode】121-Best Time to Buy and Sell Stock
  18. JOffice中的权限管理--功能粒度的权限管理配置
  19. 子域名枚举工具Sublist3r
  20. 设计模式之装饰模式(iOS开发,代码用Objective-C展示)

热门文章

  1. 切换usb口的命令
  2. Ubuntu16.04 中如何挂载第二块磁盘,挂载成功,但是用reboot和shutdown重启或关机后挂载就没有了的解决办法
  3. USBasp制作资料及全过程(菜鸟版)
  4. nfs挂载
  5. 20145324 《Java程序设计》第9周学习总结
  6. Kali视频学习6-10
  7. MR案例:单表关联查询
  8. maven打包pom.xml备忘
  9. JSch 实现 SSH 端口转发
  10. python的变量,对象的内存地址以及参数传递过程