53
53
54
54
<!-- 这里可写通用的实现逻辑 -->
55
55
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
+
56
66
<!-- tabs:start -->
57
67
58
68
### ** Python3**
62
72
``` python
63
73
class Solution :
64
74
def getRow (self , rowIndex : int ) -> List[int ]:
65
- row = [1 ] * (rowIndex + 1 )
75
+ f = [1 ] * (rowIndex + 1 )
66
76
for i in range (2 , rowIndex + 1 ):
67
77
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
70
80
```
71
81
72
82
### ** Java**
@@ -76,47 +86,33 @@ class Solution:
76
86
``` java
77
87
class Solution {
78
88
public List<Integer > getRow (int rowIndex ) {
79
- List<Integer > row = new ArrayList<> ();
89
+ List<Integer > f = new ArrayList<> ();
80
90
for (int i = 0 ; i < rowIndex + 1 ; ++ i) {
81
- row . add(1 );
91
+ f . add(1 );
82
92
}
83
93
for (int i = 2 ; i < rowIndex + 1 ; ++ i) {
84
94
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 ));
86
96
}
87
97
}
88
- return row ;
98
+ return f ;
89
99
}
90
100
}
91
101
```
92
102
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
-
107
103
### ** C++**
108
104
109
105
``` cpp
110
106
class Solution {
111
107
public:
112
108
vector<int > getRow(int rowIndex) {
113
- vector<int > row (rowIndex + 1, 1);
109
+ vector<int > f (rowIndex + 1, 1);
114
110
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] ;
117
113
}
118
114
}
119
- return row ;
115
+ return f ;
120
116
}
121
117
};
122
118
```
@@ -125,14 +121,30 @@ public:
125
121
126
122
```go
127
123
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]
133
131
}
134
132
}
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 ;
136
148
}
137
149
```
138
150
@@ -142,13 +154,13 @@ func getRow(rowIndex int) []int {
142
154
impl Solution {
143
155
pub fn get_row (row_index : i32 ) -> Vec <i32 > {
144
156
let n = (row_index + 1 ) as usize ;
145
- let mut res = vec! [1 ; n ];
157
+ let mut f = vec! [1 ; n ];
146
158
for i in 2 .. n {
147
159
for j in (1 .. i ). rev () {
148
- res [j ] += res [j - 1 ];
160
+ f [j ] += f [j - 1 ];
149
161
}
150
162
}
151
- res
163
+ f
152
164
}
153
165
}
154
166
```
0 commit comments