Different Ways to Add Parentheses

来源:互联网 发布:部落冲突升级兵种数据 编辑:程序博客网 时间:2024/06/03 12:54

题目描述

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 *.
这里写图片描述

思路分析

采用分而治之的思想,将这个看似复杂的问题简单化:从左到右顺序找出’+’,’-’和’*’,当找到一个运算符时就将字符串分成左、右两部分,分别调用diffWaysToCompute函数递归计算所有可能的值,最后利用for循环遍历左、右两部分vector的值进行交叉运算,并将结果放在容器result中;如果没有找到任何运算符,就将字符串转换成int型数字并放在result。

代码实现

class Solution {public:    vector<int> diffWaysToCompute(string input) {      vector<int> result;      for (int s = 0; s < input.length(); s++) {          char ch = input.at(s);          if (ch == '+' || ch == '-' || ch == '*') {             vector<int> left = diffWaysToCompute(input.substr(0, s));             //substr默认从input的第i+1位到input的末尾             vector<int> right = diffWaysToCompute(input.substr(s+1));             for (int i = 0; i < left.size(); i++) {                for (int j = 0; j < right.size(); j++) {                    if (ch == '+') {                        result.push_back(left[i] + right[j]);                    }                    else if (ch == '-') {                        result.push_back(left[i] - right[j]);                    }                    else if (ch == '*') {                        result.push_back(left[i] * right[j]);                    }                }             }          }      }      if (result.size() == 0) {          result.push_back(atoi(input.c_str()));      }      return result;    }};
原创粉丝点击