-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGridTraveler.js
More file actions
55 lines (50 loc) · 1.6 KB
/
GridTraveler.js
File metadata and controls
55 lines (50 loc) · 1.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
let count=0;
//Recursion
/*const gridTraveler =(n,m) => { // T.C. = O(2^(n+m)) S.C. = O(n+m)
if(n===1||m===1) return 1;
if(n===0||m===0) return 0;
count++;
return gridTraveler(n,m-1)+gridTraveler(n-1,m);
}*/
//Memoization
/*const gridTraveler =(n,m,memo={}) => { // T.C. = O(n*m) S.C. = O(n+m)
const key = n+','+m;
if(key in memo) return memo[key];
if(n===1||m===1) return 1;
if(n===0||m===0) return 0;
memo[key]= gridTraveler(n,m-1,memo)+gridTraveler(n-1,m,memo);
count++;
return memo[key];
}*/
//Memoization / enhanced
/*const gridTraveler =(n,m,memo={}) => { // T.C. = O(n*m) S.C. = O(n+m)
const key = ((n>m)?n:m)+','+((n<m)?n:m);// as gridTraveler(n,m) = gridTraveler(m,n);
if(key in memo) return memo[key];
if(n===1||m===1) return 1;
if(n===0||m===0) return 0;
memo[key]= gridTraveler(n,m-1,memo)+gridTraveler(n-1,m,memo);
count++;
return memo[key];
}*/
//Tabulation
const gridTraveler = (n,m) => { // T.C. = O(n*m) S.C. = O(n*m)
const table = Array(n+1)
.fill()
.map(()=> Array(m+1).fill(0));
table[1][1]=1;
// console.log(table);
for(i=1;i<=n;i++) {
for(j=1;j<=m;j++) {
if(i+1<=n) table[i+1][j]+=table[i][j];
if(j+1<=m) table[i][j+1]+=table[i][j];
// table[i][j]=table[i-1][j]+table[i][j-1];
}
}
return table[n][m];
}
console.log(gridTraveler(2,3)) //3
console.log(gridTraveler(4,3)) //10
console.log(gridTraveler(5,5)) //70
console.log(gridTraveler(10,10)) //48620
console.log(gridTraveler(18,18)) //2333606220
// console.log(count);