forked from neetcode-gh/leetcode
-
Notifications
You must be signed in to change notification settings - Fork 0
/
0119-pascals-triangle-ii.java
40 lines (33 loc) · 1.14 KB
/
0119-pascals-triangle-ii.java
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
//Approach 1 using recursion
class Solution {
public List<Integer> getRow(int rowIndex) {
List<Integer> ans = new ArrayList<>();
int[][] dp = new int[rowIndex + 1][rowIndex + 1];
for (int i = 0; i <= rowIndex; i++) {
ans.add(value(rowIndex, i, dp));
}
return ans;
}
public int value(int row, int col, int[][] dp) {
if (row == 0 || col == 0 || col == row) return 1;
if (dp[row][col] != 0) return dp[row][col];
dp[row][col] = value(row - 1, col - 1, dp) + value(row - 1, col, dp);
return dp[row][col];
}
/** Iterative approach to solving the problem - follows Neetcode's solution in Python
* O(n) time complexity
* */
public List<Integer> getRow(int rowIndex) {
List<Integer> res = new ArrayList<>(rowIndex + 1);
for (int i = 0; i < rowIndex + 1; i++) {
res.add(1);
}
for (int i = 2; i < rowIndex + 1; i++) {
for (int j = i - 1; j > 0; j--) {
res.set(j, res.get(j) + res.get(j - 1));
}
}
return res;
}
}
//todo: add bottom up approach