Skip to content

Commit 140deb4

Browse files
committed
feat: add solutions to lc problem: No.0119
No.0119.Pascal's Triangle II
1 parent 47e4220 commit 140deb4

File tree

8 files changed

+137
-121
lines changed

8 files changed

+137
-121
lines changed

solution/0100-0199/0119.Pascal's Triangle II/README.md

+46-34
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,16 @@
5353

5454
<!-- 这里可写通用的实现逻辑 -->
5555

56+
**方法一:递推**
57+
58+
我们创建一个长度为 $rowIndex + 1$ 的数组 $f$,初始时所有元素均为 $1$。
59+
60+
接下来,我们从第 $2$ 行开始,从后往前计算当前行的第 $j$ 个元素的值 $f[j] = f[j] + f[j - 1]$,其中 $j \in [1, i - 1]$。
61+
62+
最后返回 $f$ 即可。
63+
64+
时间复杂度 $O(n^2)$,空间复杂度 $O(n)$。其中 $n$ 是给定的行数。
65+
5666
<!-- tabs:start -->
5767

5868
### **Python3**
@@ -62,11 +72,11 @@
6272
```python
6373
class Solution:
6474
def getRow(self, rowIndex: int) -> List[int]:
65-
row = [1] * (rowIndex + 1)
75+
f = [1] * (rowIndex + 1)
6676
for i in range(2, rowIndex + 1):
6777
for j in range(i - 1, 0, -1):
68-
row[j] += row[j - 1]
69-
return row
78+
f[j] += f[j - 1]
79+
return f
7080
```
7181

7282
### **Java**
@@ -76,47 +86,33 @@ class Solution:
7686
```java
7787
class Solution {
7888
public List<Integer> getRow(int rowIndex) {
79-
List<Integer> row = new ArrayList<>();
89+
List<Integer> f = new ArrayList<>();
8090
for (int i = 0; i < rowIndex + 1; ++i) {
81-
row.add(1);
91+
f.add(1);
8292
}
8393
for (int i = 2; i < rowIndex + 1; ++i) {
8494
for (int j = i - 1; j > 0; --j) {
85-
row.set(j, row.get(j) + row.get(j - 1));
95+
f.set(j, f.get(j) + f.get(j - 1));
8696
}
8797
}
88-
return row;
98+
return f;
8999
}
90100
}
91101
```
92102

93-
### **TypeScript**
94-
95-
```ts
96-
function getRow(rowIndex: number): number[] {
97-
let ans = new Array(rowIndex + 1).fill(1);
98-
for (let i = 2; i < rowIndex + 1; ++i) {
99-
for (let j = i - 1; j > 0; --j) {
100-
ans[j] += ans[j - 1];
101-
}
102-
}
103-
return ans;
104-
}
105-
```
106-
107103
### **C++**
108104

109105
```cpp
110106
class Solution {
111107
public:
112108
vector<int> getRow(int rowIndex) {
113-
vector<int> row(rowIndex + 1, 1);
109+
vector<int> f(rowIndex + 1, 1);
114110
for (int i = 2; i < rowIndex + 1; ++i) {
115-
for (int j = i - 1; j > 0; --j) {
116-
row[j] += row[j - 1];
111+
for (int j = i - 1; j; --j) {
112+
f[j] += f[j - 1];
117113
}
118114
}
119-
return row;
115+
return f;
120116
}
121117
};
122118
```
@@ -125,14 +121,30 @@ public:
125121
126122
```go
127123
func getRow(rowIndex int) []int {
128-
row := make([]int, rowIndex+1)
129-
row[0] = 1
130-
for i := 1; i <= rowIndex; i++ {
131-
for j := i; j > 0; j-- {
132-
row[j] += row[j-1]
124+
f := make([]int, rowIndex+1)
125+
for i := range f {
126+
f[i] = 1
127+
}
128+
for i := 2; i < rowIndex+1; i++ {
129+
for j := i - 1; j > 0; j-- {
130+
f[j] += f[j-1]
133131
}
134132
}
135-
return row
133+
return f
134+
}
135+
```
136+
137+
### **TypeScript**
138+
139+
```ts
140+
function getRow(rowIndex: number): number[] {
141+
const f: number[] = Array(rowIndex + 1).fill(1);
142+
for (let i = 2; i < rowIndex + 1; ++i) {
143+
for (let j = i - 1; j; --j) {
144+
f[j] += f[j - 1];
145+
}
146+
}
147+
return f;
136148
}
137149
```
138150

@@ -142,13 +154,13 @@ func getRow(rowIndex int) []int {
142154
impl Solution {
143155
pub fn get_row(row_index: i32) -> Vec<i32> {
144156
let n = (row_index + 1) as usize;
145-
let mut res = vec![1; n];
157+
let mut f = vec![1; n];
146158
for i in 2..n {
147159
for j in (1..i).rev() {
148-
res[j] += res[j - 1];
160+
f[j] += f[j - 1];
149161
}
150162
}
151-
res
163+
f
152164
}
153165
}
154166
```

solution/0100-0199/0119.Pascal's Triangle II/README_EN.md

+36-34
Original file line numberDiff line numberDiff line change
@@ -38,59 +38,45 @@
3838
```python
3939
class Solution:
4040
def getRow(self, rowIndex: int) -> List[int]:
41-
row = [1] * (rowIndex + 1)
41+
f = [1] * (rowIndex + 1)
4242
for i in range(2, rowIndex + 1):
4343
for j in range(i - 1, 0, -1):
44-
row[j] += row[j - 1]
45-
return row
44+
f[j] += f[j - 1]
45+
return f
4646
```
4747

4848
### **Java**
4949

5050
```java
5151
class Solution {
5252
public List<Integer> getRow(int rowIndex) {
53-
List<Integer> row = new ArrayList<>();
53+
List<Integer> f = new ArrayList<>();
5454
for (int i = 0; i < rowIndex + 1; ++i) {
55-
row.add(1);
55+
f.add(1);
5656
}
5757
for (int i = 2; i < rowIndex + 1; ++i) {
5858
for (int j = i - 1; j > 0; --j) {
59-
row.set(j, row.get(j) + row.get(j - 1));
59+
f.set(j, f.get(j) + f.get(j - 1));
6060
}
6161
}
62-
return row;
62+
return f;
6363
}
6464
}
6565
```
6666

67-
### **TypeScript**
68-
69-
```ts
70-
function getRow(rowIndex: number): number[] {
71-
let ans = new Array(rowIndex + 1).fill(1);
72-
for (let i = 2; i < rowIndex + 1; ++i) {
73-
for (let j = i - 1; j > 0; --j) {
74-
ans[j] += ans[j - 1];
75-
}
76-
}
77-
return ans;
78-
}
79-
```
80-
8167
### **C++**
8268

8369
```cpp
8470
class Solution {
8571
public:
8672
vector<int> getRow(int rowIndex) {
87-
vector<int> row(rowIndex + 1, 1);
73+
vector<int> f(rowIndex + 1, 1);
8874
for (int i = 2; i < rowIndex + 1; ++i) {
89-
for (int j = i - 1; j > 0; --j) {
90-
row[j] += row[j - 1];
75+
for (int j = i - 1; j; --j) {
76+
f[j] += f[j - 1];
9177
}
9278
}
93-
return row;
79+
return f;
9480
}
9581
};
9682
```
@@ -99,14 +85,30 @@ public:
9985
10086
```go
10187
func getRow(rowIndex int) []int {
102-
row := make([]int, rowIndex+1)
103-
row[0] = 1
104-
for i := 1; i <= rowIndex; i++ {
105-
for j := i; j > 0; j-- {
106-
row[j] += row[j-1]
88+
f := make([]int, rowIndex+1)
89+
for i := range f {
90+
f[i] = 1
91+
}
92+
for i := 2; i < rowIndex+1; i++ {
93+
for j := i - 1; j > 0; j-- {
94+
f[j] += f[j-1]
10795
}
10896
}
109-
return row
97+
return f
98+
}
99+
```
100+
101+
### **TypeScript**
102+
103+
```ts
104+
function getRow(rowIndex: number): number[] {
105+
const f: number[] = Array(rowIndex + 1).fill(1);
106+
for (let i = 2; i < rowIndex + 1; ++i) {
107+
for (let j = i - 1; j; --j) {
108+
f[j] += f[j - 1];
109+
}
110+
}
111+
return f;
110112
}
111113
```
112114

@@ -116,13 +118,13 @@ func getRow(rowIndex int) []int {
116118
impl Solution {
117119
pub fn get_row(row_index: i32) -> Vec<i32> {
118120
let n = (row_index + 1) as usize;
119-
let mut res = vec![1; n];
121+
let mut f = vec![1; n];
120122
for i in 2..n {
121123
for j in (1..i).rev() {
122-
res[j] += res[j - 1];
124+
f[j] += f[j - 1];
123125
}
124126
}
125-
res
127+
f
126128
}
127129
}
128130
```
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
class Solution {
2-
public:
3-
vector<int> getRow(int rowIndex) {
4-
vector<int> row(rowIndex + 1, 1);
5-
for (int i = 2; i < rowIndex + 1; ++i) {
6-
for (int j = i - 1; j > 0; --j) {
7-
row[j] += row[j - 1];
8-
}
9-
}
10-
return row;
11-
}
1+
class Solution {
2+
public:
3+
vector<int> getRow(int rowIndex) {
4+
vector<int> f(rowIndex + 1, 1);
5+
for (int i = 2; i < rowIndex + 1; ++i) {
6+
for (int j = i - 1; j; --j) {
7+
f[j] += f[j - 1];
8+
}
9+
}
10+
return f;
11+
}
1212
};
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
func getRow(rowIndex int) []int {
2-
row := make([]int, rowIndex+1)
3-
row[0] = 1
4-
for i := 1; i <= rowIndex; i++ {
5-
for j := i; j > 0; j-- {
6-
row[j] += row[j-1]
2+
f := make([]int, rowIndex+1)
3+
for i := range f {
4+
f[i] = 1
5+
}
6+
for i := 2; i < rowIndex+1; i++ {
7+
for j := i - 1; j > 0; j-- {
8+
f[j] += f[j-1]
79
}
810
}
9-
return row
11+
return f
1012
}
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
class Solution {
2-
public List<Integer> getRow(int rowIndex) {
3-
List<Integer> row = new ArrayList<>();
4-
for (int i = 0; i < rowIndex + 1; ++i) {
5-
row.add(1);
6-
}
7-
for (int i = 2; i < rowIndex + 1; ++i) {
8-
for (int j = i - 1; j > 0; --j) {
9-
row.set(j, row.get(j) + row.get(j - 1));
10-
}
11-
}
12-
return row;
13-
}
1+
class Solution {
2+
public List<Integer> getRow(int rowIndex) {
3+
List<Integer> f = new ArrayList<>();
4+
for (int i = 0; i < rowIndex + 1; ++i) {
5+
f.add(1);
6+
}
7+
for (int i = 2; i < rowIndex + 1; ++i) {
8+
for (int j = i - 1; j > 0; --j) {
9+
f.set(j, f.get(j) + f.get(j - 1));
10+
}
11+
}
12+
return f;
13+
}
1414
}
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
class Solution:
2-
def getRow(self, rowIndex: int) -> List[int]:
3-
row = [1] * (rowIndex + 1)
4-
for i in range(2, rowIndex + 1):
5-
for j in range(i - 1, 0, -1):
6-
row[j] += row[j - 1]
7-
return row
1+
class Solution:
2+
def getRow(self, rowIndex: int) -> List[int]:
3+
f = [1] * (rowIndex + 1)
4+
for i in range(2, rowIndex + 1):
5+
for j in range(i - 1, 0, -1):
6+
f[j] += f[j - 1]
7+
return f
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
impl Solution {
2-
pub fn get_row(row_index: i32) -> Vec<i32> {
3-
let n = (row_index + 1) as usize;
4-
let mut res = vec![1; n];
5-
for i in 2..n {
6-
for j in (1..i).rev() {
7-
res[j] += res[j - 1];
8-
}
9-
}
10-
res
11-
}
12-
}
1+
impl Solution {
2+
pub fn get_row(row_index: i32) -> Vec<i32> {
3+
let n = (row_index + 1) as usize;
4+
let mut f = vec![1; n];
5+
for i in 2..n {
6+
for j in (1..i).rev() {
7+
f[j] += f[j - 1];
8+
}
9+
}
10+
f
11+
}
12+
}
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
function getRow(rowIndex: number): number[] {
2-
let ans = new Array(rowIndex + 1).fill(1);
2+
const f: number[] = Array(rowIndex + 1).fill(1);
33
for (let i = 2; i < rowIndex + 1; ++i) {
4-
for (let j = i - 1; j > 0; --j) {
5-
ans[j] += ans[j - 1];
4+
for (let j = i - 1; j; --j) {
5+
f[j] += f[j - 1];
66
}
77
}
8-
return ans;
8+
return f;
99
}

0 commit comments

Comments
 (0)