首页 > 学院 > 开发设计 > 正文

Leetcode 241. Different Ways to Add Parentheses

2019-11-06 07:47:07
字体:
来源:转载
供稿:网友

source url

Leetcode 53.Maximum Subarray

source url

题目描述

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 *. 输入:一个算式,字符串形式 输出:该数组中,不同运算顺序的结果 如:

Input:"2-1-1"

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

Output:[0, 2]

代码

class Solution {public: vector<int> diffWaysToCompute(string input) { vector<int> results, l, r; int sSize = input.length(); char cur; bool isAllInt = true; for(int i = 0;i<sSize;i++){ cur = input[i]; //if cur char is an operator : '+', '-' or '*' //get different ways computed values of left sub-string and right sub-string //calculate possible results from l`Operate`r if(cur=='-'||cur=='+'||cur=='*'){ isAllInt = false; l = diffWaysToCompute(input.substr(0,i)); r = diffWaysToCompute(input.substr(i+1,sSize)); for(int i =0;i<l.size();i++) for(int j=0;j<r.size();j++) results.push_back(cur=='-'?l[i]-r[j]:cur=='+'?l[i]+r[j]:l[i]*r[j]); } } //return the integer results if(isAllInt){ results.push_back(atoi(input.c_str())); } return results; }};

算法描述

采用递归的方式进行计算 每个二元算式都是类似的基本形式 a Operate b

对于双目运算符而言,可以通过获得左操作数数与右操作数,然后通过操作符进行操作 递归基: 对于输入字符串,如果没有操作符;则直接返回其结果 否则返回所有,左操作数o右操作数的结果 递归步: 从左子字符串与右子字符串中获得可能的计算结果

复杂度分析: 不会-o-,应该与操作符个数及字符串长度相关


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表