当前位置:网站首页>LeetCode 241. 为运算表达式设计优先级
LeetCode 241. 为运算表达式设计优先级
2022-07-03 08:49:00 【Sasakihaise_】

【分治】按照运算符号划分左右,递归处理左右后得到左右两侧可能的结果进行组合。
class Solution {
// 分治 9:30 10:34
List<String> list = new ArrayList();
List<Integer> diff(int start, int end) {
if (start == end) {
String str = list.get(start);
return new ArrayList<Integer>() {
{ add(Integer.parseInt(str)); }};
}
List<Integer> ans = new ArrayList();
for (var i = start; i <= end; i++) {
String str = list.get(i);
if (str.equals("+") || str.equals("-") || str.equals("*")) {
List<Integer> left = diff(start, i - 1);
List<Integer> right = diff(i + 1, end);
for (var x: left) {
for (var y: right) {
if (str.equals("+")) {
ans.add(x + y);
} else if(str.equals("-")) {
ans.add(x - y);
} else if (str.equals("*")) {
ans.add(x * y);
}
}
}
}
}
return ans;
}
public List<Integer> diffWaysToCompute(String expression) {
String num = "";
for (var i = 0; i < expression.length(); i++) {
char c = expression.charAt(i);
if (c >= '0' && c <= '9') {
num += c;
} else {
list.add(num);
num = "";
list.add("" + c);
}
}
list.add(num);
return diff(0, list.size() - 1);
}
}【优化】优化字符串处理,用StringBuilder进行拼接
class Solution {
// 分治 9:30 10:34
List<String> list = new ArrayList();
Map<Integer, List<Integer>> map = new HashMap();
List<Integer> diff(int start, int end) {
int key = start * 100 + end;
if (map.containsKey(key)) {
// System.out.println("en");
return map.get(key);
}
if (start == end) {
String str = list.get(start);
List<Integer> ret = new ArrayList();
ret.add(Integer.parseInt(str));
map.put(key, ret);
return ret;
}
List<Integer> ans = new ArrayList();
for (var i = start; i <= end; i++) {
String str = list.get(i);
if (str.equals("+") || str.equals("-") || str.equals("*")) {
List<Integer> left = diff(start, i - 1);
List<Integer> right = diff(i + 1, end);
for (var x: left) {
for (var y: right) {
if (str.equals("+")) {
ans.add(x + y);
} else if(str.equals("-")) {
ans.add(x - y);
} else if (str.equals("*")) {
ans.add(x * y);
}
}
}
}
}
map.put(key, ans);
return ans;
}
public List<Integer> diffWaysToCompute(String expression) {
StringBuilder sb = new StringBuilder();
for (var i = 0; i < expression.length(); i++) {
char c = expression.charAt(i);
if (c >= '0' && c <= '9') {
sb.append(c);
} else {
list.add(sb.toString());
sb = new StringBuilder();
list.add(String.valueOf(c));
}
}
list.add(sb.toString());
return diff(0, list.size() - 1);
}
}
边栏推荐
- Complex character + number pyramid
- 22-06-27 西安 redis(01) 安装redis、redis5种常见数据类型的命令
- Alibaba canal actual combat
- DOM 渲染系统(render mount patch)响应式系统
- Find the combination number acwing 886 Find the combination number II
- 【Rust 笔记】09-特型与泛型
- 状态压缩DP AcWing 291. 蒙德里安的梦想
- Concurrent programming (V) detailed explanation of atomic and unsafe magic classes
- First Servlet
- Unity editor expansion - window, sub window, menu, right-click menu (context menu)
猜你喜欢

Parameters of convolutional neural network

数位统计DP AcWing 338. 计数问题

UE4 source code reading_ Bone model and animation system_ Animation compression

Dom4j traverses and updates XML

22-06-28 西安 redis(02) 持久化机制、入门使用、事务控制、主从复制机制

分配异常的servlet

Sending and receiving of request parameters

Query XML documents with XPath

Facial expression recognition based on pytorch convolution -- graduation project

Final review of Database Principles
随机推荐
OpenGL learning notes
注解简化配置与启动时加载
UE4 source code reading_ Mobile synchronization
[public key cryptography] ECC elliptic cryptosystem (implementing ElGamal encryption method)
22-06-28 Xi'an redis (02) persistence mechanism, entry, transaction control, master-slave replication mechanism
Es8 async and await learning notes
How to use Jupiter notebook
分配异常的servlet
MySQL three logs
Unity editor expansion - draw lines
Deep parsing JVM memory model
第一个Servlet
【Rust 笔记】13-迭代器(上)
使用dlv分析golang进程cpu占用高问题
[concurrent programming] thread foundation and sharing between threads
Message queue for interprocess communication
22-05-26 西安 面试题(01)准备
Graphics_ Learnopongl learning notes
【Rust笔记】06-包和模块
[rust notes] 02 ownership