MCPcopy Create free account
hub / github.com/Tiwarishashwat/InterviewCodes / recur

Method recur

DifferentWaystoAddParentheses.java:9–52  ·  view source on GitHub ↗
(String exp, int start, int end,List<Integer>[][] dp)

Source from the content-addressed store, hash-verified

7 //tc: o(N*2^N)
8 //sc: o(N^2*2^N)
9 public List<Integer> recur(String exp, int start, int end,List<Integer>[][] dp){
10 List<Integer> res = new ArrayList<>();
11 if(dp[start][end]!=null){
12 return dp[start][end];
13 }
14 //base case : single digit
15 if(start==end){
16 int num = exp.charAt(start)-'0';
17 res.add(num);
18 return res;
19 }
20 //base case : double digit
21 if(end-start==1 && Character.isDigit(exp.charAt(start))){
22 int num1 = exp.charAt(start)-'0';
23 int num2 = exp.charAt(end)-'0';
24 // int num = Integer.parseInt(exp.substring(start,end+1));
25 res.add(num1*10 + num2);
26 return res;
27 }
28 //split
29 // N
30 for(int i=start;i<=end;i++){
31 if(Character.isDigit(exp.charAt(i))){
32 continue;
33 }
34 char op = exp.charAt(i);
35 // 2^N
36 List<Integer> left = recur(exp,start,i-1,dp);
37 List<Integer> right = recur(exp,i+1,end,dp);
38 for(int l : left){
39 for(int r : right){
40 if(op == '*'){
41 res.add(l*r);
42 }else if(op == '+'){
43 res.add(l+r);
44 }else{
45 res.add(l-r);
46 }
47 }
48 }
49 }
50 dp[start][end] = res;
51 return res;
52 }
53}

Callers 1

diffWaysToComputeMethod · 0.95

Calls 1

addMethod · 0.45

Tested by

no test coverage detected