欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Different Ways to Add Parentheses

程序员文章站 2022-05-18 10:04:32
...

题目描述

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 *.
Different Ways to Add Parentheses

思路分析

采用分而治之的思想,将这个看似复杂的问题简单化:从左到右顺序找出’+’,’-’和’*’,当找到一个运算符时就将字符串分成左、右两部分,分别调用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;
    }
};
相关标签: 分而治之