[LeetCode] 241. Different Ways to Add Parentheses
时间:2020-07-11
本文章向大家介绍[LeetCode] 241. Different Ways to Add Parentheses,主要包括[LeetCode] 241. Different Ways to Add Parentheses使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
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"
Output:[0, 2]
Explanation: ((2-1)-1) = 0 (2-(1-1)) = 2Example 2:
Input:"2*3-4*5"
Output:[-34, -14, -10, -10, 10]
Explanation: (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
为运算表达式设计优先级。题意是给一个以字符串表示的运算表达式,请为其添加括号,展示出所有可能的解。运算符号只有+,-,*。
思路是分治法。在实际操作的过程中,不需要真的添加括号,而是会通过分治的办法以达到括号能实现的运算优先级的目的。具体的思路是,遍历input字符串,每当遇到一个运算符号,就把这个符号的左边和右边分开,接着往下分治计算。在分治后的两个list中,挑出两个数字两两计算。最后把计算结果加入最后的list。
时间 - ?
空间O(n)
Java实现
1 class Solution { 2 public List<Integer> diffWaysToCompute(String input) { 3 List<Integer> res = new ArrayList<>(); 4 for (int i = 0; i < input.length(); i++) { 5 char c = input.charAt(i); 6 if (c == '-' || c == '*' || c == '/') { 7 String a = input.substring(0, i); 8 String b = input.substring(i + 1); 9 List<Integer> aList = diffWaysToCompute(a); 10 List<Integer> bList = diffWaysToCompute(b); 11 for (int x : aList) { 12 for (int y : bList) { 13 if (c == '-') { 14 res.add(x - y); 15 } else if (c == '+') { 16 res.add(x + y); 17 } else if (c == '*') { 18 res.add(x * y); 19 } 20 } 21 } 22 } 23 } 24 if (res.size() == 0) { 25 res.add(Integer.valueOf(input)); 26 } 27 return res; 28 } 29 }
原文地址:https://www.cnblogs.com/cnoodle/p/13282852.html
- WCF中的Binding模型之一: Binding模型简介
- WCF中的Binding模型之一: Binding模型简介
- 2017最火的五篇深度学习论文 总有一篇适合你
- SplashScreenSource的妙用
- SplashScreenSource的妙用
- SplashScreenSource的妙用
- Nodejs学习笔记(十七)--- 浮点运算decimal.js
- AI时代让自己幸福更是一种能力
- 持续不断地推荐儿童不宜视频背后,YouTube是这样训练AI的
- 人工智能会导致大量失业,你怕吗
- 机器人产业链分析-中国机器人产业的发展机遇和挑战
- 如何与深度学习服务器优雅的交互?
- 比特币大跌又反弹30%,区块链技术与企业级有着怎样的关系?
- 十个实用MySQL函数
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法