File tree 1 file changed +56
-0
lines changed
1 file changed +56
-0
lines changed Original file line number Diff line number Diff line change
1
+ // If we can't do inplace, space O(N)
2
+ class Solution {
3
+ fun uniquePathsWithObstacles (grid : Array <IntArray >): Int {
4
+
5
+ val m = grid.lastIndex
6
+ val n = grid[0 ].lastIndex
7
+
8
+ if (grid[m][n] == 1 || grid[0 ][0 ] == 1 ) return 0
9
+
10
+ val dp = IntArray (n+ 1 )
11
+ dp[n] = 1
12
+
13
+ for (i in m downTo 0 ) {
14
+ for (j in n downTo 0 ) {
15
+ if (grid[i][j] == 1 ) dp[j] = 0
16
+ else if (j < n) dp[j] = dp[j] + dp[j + 1 ]
17
+ // else dp[j] = dp[j] + 0
18
+ }
19
+ }
20
+
21
+ return dp[0 ]
22
+ }
23
+ }
24
+
25
+ // In place O(1)
26
+ class Solution {
27
+ fun uniquePathsWithObstacles (grid : Array <IntArray >): Int {
28
+
29
+ val m = grid.lastIndex
30
+ val n = grid[0 ].lastIndex
31
+
32
+ if (grid[m][n] == 1 || grid[0 ][0 ] == 1 ) return 0
33
+
34
+ grid[m][n] = 1
35
+
36
+ for (i in m- 1 downTo 0 ) {
37
+ grid[i][n] = if (grid[i][n] == 0 && grid[i + 1 ][n] == 1 ) 1 else 0
38
+ }
39
+
40
+ for (i in n- 1 downTo 0 ) {
41
+ grid[m][i] = if (grid[m][i] == 0 && grid[m][i + 1 ] == 1 ) 1 else 0
42
+ }
43
+
44
+ for (i in m- 1 downTo 0 ) {
45
+ for (j in n- 1 downTo 0 ) {
46
+ if (grid[i][j] != 1 ) {
47
+ grid[i][j] = grid[i + 1 ][j] + grid[i][j + 1 ]
48
+ } else {
49
+ grid[i][j] = 0
50
+ }
51
+ }
52
+ }
53
+
54
+ return grid[0 ][0 ]
55
+ }
56
+ }
You can’t perform that action at this time.
0 commit comments