Skip to content

Commit 47e4220

Browse files
committed
feat: add solutions to lc problem: No.0118
No.0118.Pascal's Triangle
1 parent 7c6b88c commit 47e4220

File tree

8 files changed

+185
-189
lines changed

8 files changed

+185
-189
lines changed

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

+69-60
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,11 @@
4040

4141
<!-- 这里可写通用的实现逻辑 -->
4242

43-
先设置每一行首尾元素为 1,其它元素为 0。然后根据杨辉三角,设置每一行其它元素即可。
43+
**方法一:模拟**
44+
45+
我们先创建一个答案数组 $f$,然后将 $f$ 的第一行元素设为 $[1]$。接下来,我们从第二行开始,每一行的开头和结尾元素都是 $1$,其它 $f[i][j] = f[i - 1][j - 1] + f[i - 1][j]$。
46+
47+
时间复杂度 $O(n^2)$,空间复杂度 $O(n^2)$。其中 $n$ 是行数。
4448

4549
<!-- tabs:start -->
4650

@@ -51,14 +55,11 @@
5155
```python
5256
class Solution:
5357
def generate(self, numRows: int) -> List[List[int]]:
54-
ans = []
55-
for i in range(numRows):
56-
t = [
57-
1 if j == 0 or j == i else ans[-1][j] + ans[-1][j - 1]
58-
for j in range(i + 1)
59-
]
60-
ans.append(t)
61-
return ans
58+
f = [[1]]
59+
for i in range(numRows - 1):
60+
g = [1] + [a + b for a, b in pairwise(f[-1])] + [1]
61+
f.append(g)
62+
return f
6263
```
6364

6465
### **Java**
@@ -68,36 +69,19 @@ class Solution:
6869
```java
6970
class Solution {
7071
public List<List<Integer>> generate(int numRows) {
71-
List<List<Integer>> ans = new ArrayList<>();
72-
for (int i = 0; i < numRows; ++i) {
73-
List<Integer> t = new ArrayList<>();
74-
for (int j = 0; j < i + 1; ++j) {
75-
int v = j == 0 || j == i ? 1 : ans.get(i - 1).get(j) + ans.get(i - 1).get(j - 1);
76-
t.add(v);
72+
List<List<Integer>> f = new ArrayList<>();
73+
f.add(List.of(1));
74+
for (int i = 0; i < numRows - 1; ++i) {
75+
List<Integer> g = new ArrayList<>();
76+
g.add(1);
77+
for (int j = 0; j < f.get(i).size() - 1; ++j) {
78+
g.add(f.get(i).get(j) + f.get(i).get(j + 1));
7779
}
78-
ans.add(t);
79-
}
80-
return ans;
81-
}
82-
}
83-
```
84-
85-
### **TypeScript**
86-
87-
```ts
88-
function generate(numRows: number): number[][] {
89-
if (numRows == 0) return [];
90-
let ans = [[1]];
91-
for (let i = 1; i < numRows; ++i) {
92-
ans.push(new Array(i + 1).fill(1));
93-
let half = i >> 1;
94-
for (let j = 1; j <= half; ++j) {
95-
let cur = ans[i - 1][j - 1] + ans[i - 1][j];
96-
ans[i][j] = cur;
97-
ans[i][i - j] = cur;
80+
g.add(1);
81+
f.add(g);
9882
}
83+
return f;
9984
}
100-
return ans;
10185
}
10286
```
10387

@@ -107,13 +91,18 @@ function generate(numRows: number): number[][] {
10791
class Solution {
10892
public:
10993
vector<vector<int>> generate(int numRows) {
110-
vector<vector<int>> ans;
111-
for (int i = 0; i < numRows; ++i) {
112-
vector<int> t(i + 1, 1);
113-
for (int j = 1; j < i; ++j) t[j] = ans[i - 1][j] + ans[i - 1][j - 1];
114-
ans.push_back(t);
94+
vector<vector<int>> f;
95+
f.push_back(vector<int>(1, 1));
96+
for (int i = 0; i < numRows - 1; ++i) {
97+
vector<int> g;
98+
g.push_back(1);
99+
for (int j = 0; j < f[i].size() - 1; ++j) {
100+
g.push_back(f[i][j] + f[i][j + 1]);
101+
}
102+
g.push_back(1);
103+
f.push_back(g);
115104
}
116-
return ans;
105+
return f;
117106
}
118107
};
119108
```
@@ -122,34 +111,54 @@ public:
122111
123112
```go
124113
func generate(numRows int) [][]int {
125-
ans := make([][]int, numRows)
126-
for i := range ans {
127-
t := make([]int, i+1)
128-
t[0], t[i] = 1, 1
129-
for j := 1; j < i; j++ {
130-
t[j] = ans[i-1][j] + ans[i-1][j-1]
114+
f := [][]int{[]int{1}}
115+
for i := 0; i < numRows-1; i++ {
116+
g := []int{1}
117+
for j := 0; j < len(f[i])-1; j++ {
118+
g = append(g, f[i][j]+f[i][j+1])
131119
}
132-
ans[i] = t
120+
g = append(g, 1)
121+
f = append(f, g)
133122
}
134-
return ans
123+
return f
124+
}
125+
```
126+
127+
### **TypeScript**
128+
129+
```ts
130+
function generate(numRows: number): number[][] {
131+
const f: number[][] = [[1]];
132+
for (let i = 0; i < numRows - 1; ++i) {
133+
const g: number[] = [1];
134+
for (let j = 0; j < f[i].length - 1; ++j) {
135+
g.push(f[i][j] + f[i][j + 1]);
136+
}
137+
g.push(1);
138+
f.push(g);
139+
}
140+
return f;
135141
}
136142
```
137143

138144
### **JavaScript**
139145

140146
```js
141-
const generate = function (numRows) {
142-
let arr = [];
143-
for (let i = 0; i < numRows; i++) {
144-
let row = [];
145-
row[0] = 1;
146-
row[i] = 1;
147-
for (let j = 1; j < row.length - 1; j++) {
148-
row[j] = arr[i - 1][j - 1] + arr[i - 1][j];
147+
/**
148+
* @param {number} numRows
149+
* @return {number[][]}
150+
*/
151+
var generate = function (numRows) {
152+
const f = [[1]];
153+
for (let i = 0; i < numRows - 1; ++i) {
154+
const g = [1];
155+
for (let j = 0; j < f[i].length - 1; ++j) {
156+
g.push(f[i][j] + f[i][j + 1]);
149157
}
150-
arr.push(row);
158+
g.push(1);
159+
f.push(g);
151160
}
152-
return arr;
161+
return f;
153162
};
154163
```
155164

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

+64-59
Original file line numberDiff line numberDiff line change
@@ -32,67 +32,52 @@
3232
```python
3333
class Solution:
3434
def generate(self, numRows: int) -> List[List[int]]:
35-
ans = []
36-
for i in range(numRows):
37-
t = [
38-
1 if j == 0 or j == i else ans[-1][j] + ans[-1][j - 1]
39-
for j in range(i + 1)
40-
]
41-
ans.append(t)
42-
return ans
35+
f = [[1]]
36+
for i in range(numRows - 1):
37+
g = [1] + [a + b for a, b in pairwise(f[-1])] + [1]
38+
f.append(g)
39+
return f
4340
```
4441

4542
### **Java**
4643

4744
```java
4845
class Solution {
4946
public List<List<Integer>> generate(int numRows) {
50-
List<List<Integer>> ans = new ArrayList<>();
51-
for (int i = 0; i < numRows; ++i) {
52-
List<Integer> t = new ArrayList<>();
53-
for (int j = 0; j < i + 1; ++j) {
54-
int v = j == 0 || j == i ? 1 : ans.get(i - 1).get(j) + ans.get(i - 1).get(j - 1);
55-
t.add(v);
47+
List<List<Integer>> f = new ArrayList<>();
48+
f.add(List.of(1));
49+
for (int i = 0; i < numRows - 1; ++i) {
50+
List<Integer> g = new ArrayList<>();
51+
g.add(1);
52+
for (int j = 0; j < f.get(i).size() - 1; ++j) {
53+
g.add(f.get(i).get(j) + f.get(i).get(j + 1));
5654
}
57-
ans.add(t);
55+
g.add(1);
56+
f.add(g);
5857
}
59-
return ans;
58+
return f;
6059
}
6160
}
6261
```
6362

64-
### **TypeScript**
65-
66-
```ts
67-
function generate(numRows: number): number[][] {
68-
if (numRows == 0) return [];
69-
let ans = [[1]];
70-
for (let i = 1; i < numRows; ++i) {
71-
ans.push(new Array(i + 1).fill(1));
72-
let half = i >> 1;
73-
for (let j = 1; j <= half; ++j) {
74-
let cur = ans[i - 1][j - 1] + ans[i - 1][j];
75-
ans[i][j] = cur;
76-
ans[i][i - j] = cur;
77-
}
78-
}
79-
return ans;
80-
}
81-
```
82-
8363
### **C++**
8464

8565
```cpp
8666
class Solution {
8767
public:
8868
vector<vector<int>> generate(int numRows) {
89-
vector<vector<int>> ans;
90-
for (int i = 0; i < numRows; ++i) {
91-
vector<int> t(i + 1, 1);
92-
for (int j = 1; j < i; ++j) t[j] = ans[i - 1][j] + ans[i - 1][j - 1];
93-
ans.push_back(t);
69+
vector<vector<int>> f;
70+
f.push_back(vector<int>(1, 1));
71+
for (int i = 0; i < numRows - 1; ++i) {
72+
vector<int> g;
73+
g.push_back(1);
74+
for (int j = 0; j < f[i].size() - 1; ++j) {
75+
g.push_back(f[i][j] + f[i][j + 1]);
76+
}
77+
g.push_back(1);
78+
f.push_back(g);
9479
}
95-
return ans;
80+
return f;
9681
}
9782
};
9883
```
@@ -101,34 +86,54 @@ public:
10186
10287
```go
10388
func generate(numRows int) [][]int {
104-
ans := make([][]int, numRows)
105-
for i := range ans {
106-
t := make([]int, i+1)
107-
t[0], t[i] = 1, 1
108-
for j := 1; j < i; j++ {
109-
t[j] = ans[i-1][j] + ans[i-1][j-1]
89+
f := [][]int{[]int{1}}
90+
for i := 0; i < numRows-1; i++ {
91+
g := []int{1}
92+
for j := 0; j < len(f[i])-1; j++ {
93+
g = append(g, f[i][j]+f[i][j+1])
11094
}
111-
ans[i] = t
95+
g = append(g, 1)
96+
f = append(f, g)
11297
}
113-
return ans
98+
return f
99+
}
100+
```
101+
102+
### **TypeScript**
103+
104+
```ts
105+
function generate(numRows: number): number[][] {
106+
const f: number[][] = [[1]];
107+
for (let i = 0; i < numRows - 1; ++i) {
108+
const g: number[] = [1];
109+
for (let j = 0; j < f[i].length - 1; ++j) {
110+
g.push(f[i][j] + f[i][j + 1]);
111+
}
112+
g.push(1);
113+
f.push(g);
114+
}
115+
return f;
114116
}
115117
```
116118

117119
### **JavaScript**
118120

119121
```js
120-
const generate = function (numRows) {
121-
let arr = [];
122-
for (let i = 0; i < numRows; i++) {
123-
let row = [];
124-
row[0] = 1;
125-
row[i] = 1;
126-
for (let j = 1; j < row.length - 1; j++) {
127-
row[j] = arr[i - 1][j - 1] + arr[i - 1][j];
122+
/**
123+
* @param {number} numRows
124+
* @return {number[][]}
125+
*/
126+
var generate = function (numRows) {
127+
const f = [[1]];
128+
for (let i = 0; i < numRows - 1; ++i) {
129+
const g = [1];
130+
for (let j = 0; j < f[i].length - 1; ++j) {
131+
g.push(f[i][j] + f[i][j + 1]);
128132
}
129-
arr.push(row);
133+
g.push(1);
134+
f.push(g);
130135
}
131-
return arr;
136+
return f;
132137
};
133138
```
134139

Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
class Solution {
22
public:
33
vector<vector<int>> generate(int numRows) {
4-
vector<vector<int>> ans;
5-
for (int i = 0; i < numRows; ++i) {
6-
vector<int> t(i + 1, 1);
7-
for (int j = 1; j < i; ++j) t[j] = ans[i - 1][j] + ans[i - 1][j - 1];
8-
ans.push_back(t);
4+
vector<vector<int>> f;
5+
f.push_back(vector<int>(1, 1));
6+
for (int i = 0; i < numRows - 1; ++i) {
7+
vector<int> g;
8+
g.push_back(1);
9+
for (int j = 0; j < f[i].size() - 1; ++j) {
10+
g.push_back(f[i][j] + f[i][j + 1]);
11+
}
12+
g.push_back(1);
13+
f.push_back(g);
914
}
10-
return ans;
15+
return f;
1116
}
1217
};
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
func generate(numRows int) [][]int {
2-
ans := make([][]int, numRows)
3-
for i := range ans {
4-
t := make([]int, i+1)
5-
t[0], t[i] = 1, 1
6-
for j := 1; j < i; j++ {
7-
t[j] = ans[i-1][j] + ans[i-1][j-1]
2+
f := [][]int{[]int{1}}
3+
for i := 0; i < numRows-1; i++ {
4+
g := []int{1}
5+
for j := 0; j < len(f[i])-1; j++ {
6+
g = append(g, f[i][j]+f[i][j+1])
87
}
9-
ans[i] = t
8+
g = append(g, 1)
9+
f = append(f, g)
1010
}
11-
return ans
11+
return f
1212
}

0 commit comments

Comments
 (0)