241. Different Ways to Add Parentheses
```java
class Solution {
public List<Integer> diffWaysToCompute(String expression) {
Map<String, List<Integer>> memo = new HashMap<>();
return dfs(expression, memo);
}
private List<Integer> dfs(String expression, Map<String, List<Integer>> memo) {
if (memo.containsKey(expression)) {
return memo.get(expression);
}
List<Integer> result = new ArrayList<>();
for (int i = 0; i < expression.length(); i++) {
char c = expression.charAt(i);
if (c == '+' || c == '-' || c == '*') {
List<Integer> left = diffWaysToCompute(expression.substring(0, i));
List<Integer> right = diffWaysToCompute(expression.substring(i+1));
for (int l : left) {
for (int r : right) {
int calResult = calculate(l, r, c);
result.add(calResult);
}
}
}
}
if (result.size() == 0) { // no any cal result, so it a pure number expression
result.add(Integer.parseInt(expression));
}
memo.put(expression, result);
return result;
}
private int calculate(int x, int y, char operator) {
if (operator == '-') {
return x - y;
}
if (operator == '+') {
return x + y;
}
if (operator == '*') {
return x * y;
}
return 0;
}
}
/*
if we meet "+", "-", "*"
get dfs, left part, right part
for loop cal
2
"-"
1-1 -> 1
-
1
2-1 -> 2
"-" -
1 1
*/
```T: O(n^3), 我們要記錄n^2個數級的DP,每個DP我們都經歷了分解點。所以時間複雜度大概是N^3
S: O(n)
Last updated
Was this helpful?