58
58
59
59
** 方法一:贪心**
60
60
61
- 我们先创建一个答案数组 ` ans ` ,其中 ` ans[0] ` 和 ` ans[1] ` 分别表示第 $0$ 行和第 $1$ 行的元素 。
61
+ 我们先创建一个答案数组 $ ans$ ,其中 $ ans[ 0] $ 和 $ ans[ 1] $ 分别表示矩阵的第一行和第二行 。
62
62
63
- 对于 ` colsum ` 中的每个元素 $v$ :
63
+ 接下来,从左到右遍历数组 $ colsum$,对于当前遍历到的元素 $colsum [ j ] $,我们有以下几种情况 :
64
64
65
- - 如果 $v = 2$,那么我们将 ` ans[0][j] ` 和 ` ans[1][j] ` 都置为 $1$,其中 $j$ 是当前元素的下标 。此时 ` upper ` 和 ` lower ` 都减去 $1$。
66
- - 如果 $v = 1$,那么我们将 ` ans[0][j] ` 或 ` ans[1][j] ` 置为 $1$,其中 $j$ 是当前元素的下标 。如果 ` upper ` 大于 ` lower ` ,那么我们优先将 ` ans[0][j] ` 置为 $1$,否则我们优先将 ` ans[1][j] ` 置为 $1$。此时 ` upper ` 或 ` lower ` 减去 $1$。
67
- - 如果 $v = 0$,那么我们将 ` ans[0][j] ` 和 ` ans[1][j] ` 都置为 $0$,其中 $j$ 是当前元素的下标 。
68
- - 如果 ` upper ` 或 ` lower ` 小于 $ 0$,那么我们直接返回一个空数组 。
65
+ - 如果 $colsum [ j ] = 2$,那么我们将 $ ans[ 0] [ j ] $ 和 $ ans[ 1] [ j ] $ 都置为 $1$。此时 $ upper$ 和 $ lower$ 都减去 $1$。
66
+ - 如果 $colsum [ j ] = 1$,那么我们将 $ ans[ 0] [ j ] $ 或 $ ans[ 1] [ j ] $ 置为 $1$。如果 $ upper \gt lower$ ,那么我们优先将 $ ans[ 0] [ j ] $ 置为 $1$,否则我们优先将 $ ans[ 1] [ j ] $ 置为 $1$。此时 $ upper$ 或 $ lower$ 减去 $1$。
67
+ - 如果 $colsum [ j ] = 0$,那么我们将 $ ans[ 0] [ j ] $ 和 $ ans[ 1] [ j ] $ 都置为 $0$。
68
+ - 如果 $ upper \lt 0$ 或 $ lower \lt 0$,那么说明无法构造出满足要求的矩阵,我们返回一个空数组 。
69
69
70
- 遍历完 ` colsum ` 后 ,如果 ` upper ` 和 ` lower ` 都为 $0$,那么我们返回 ` ans ` ,否则我们返回一个空数组。
70
+ 遍历结束 ,如果 $ upper$ 和 $ lower$ 都为 $0$,那么我们返回 $ ans$ ,否则我们返回一个空数组。
71
71
72
- 时间复杂度 $O(n)$,空间复杂度 $O(n)$。 其中 $n$ 是 ` colsum ` 的长度。
72
+ 时间复杂度 $O(n)$,其中 $n$ 是数组 $ colsum$ 的长度。忽略答案数组的空间消耗,空间复杂度 $O(1)$ 。
73
73
74
74
<!-- tabs:start -->
75
75
@@ -108,39 +108,30 @@ class Solution:
108
108
class Solution {
109
109
public List<List<Integer > > reconstructMatrix (int upper , int lower , int [] colsum ) {
110
110
int n = colsum. length;
111
- List<List<Integer > > ans = new ArrayList<> ();
112
111
List<Integer > first = new ArrayList<> ();
113
112
List<Integer > second = new ArrayList<> ();
114
113
for (int j = 0 ; j < n; ++ j) {
114
+ int a = 0 , b = 0 ;
115
115
if (colsum[j] == 2 ) {
116
- first. add(1 );
117
- second. add(1 );
116
+ a = b = 1 ;
118
117
upper-- ;
119
118
lower-- ;
120
119
} else if (colsum[j] == 1 ) {
121
120
if (upper > lower) {
122
121
upper-- ;
123
- first. add(1 );
124
- second. add(0 );
122
+ a = 1 ;
125
123
} else {
126
124
lower-- ;
127
- first. add(0 );
128
- second. add(1 );
125
+ b = 1 ;
129
126
}
130
- } else {
131
- first. add(0 );
132
- second. add(0 );
133
127
}
134
128
if (upper < 0 || lower < 0 ) {
135
- return ans ;
129
+ break ;
136
130
}
131
+ first. add(a);
132
+ second. add(b);
137
133
}
138
- if (upper != 0 || lower != 0 ) {
139
- return ans;
140
- }
141
- ans. add(first);
142
- ans. add(second);
143
- return ans;
134
+ return upper == 0 && lower == 0 ? List . of(first, second) : List . of();
144
135
}
145
136
}
146
137
```
@@ -169,10 +160,10 @@ public:
169
160
}
170
161
}
171
162
if (upper < 0 || lower < 0) {
172
- return {} ;
163
+ break ;
173
164
}
174
165
}
175
- return upper != 0 || lower != 0 ? vector<vector<int >>{} : ans;
166
+ return upper || lower ? vector<vector<int >>() : ans;
176
167
}
177
168
};
178
169
```
@@ -202,7 +193,7 @@ func reconstructMatrix(upper int, lower int, colsum []int) [][]int {
202
193
}
203
194
}
204
195
if upper < 0 || lower < 0 {
205
- return [][]int{}
196
+ break
206
197
}
207
198
}
208
199
if upper != 0 || lower != 0 {
@@ -212,6 +203,40 @@ func reconstructMatrix(upper int, lower int, colsum []int) [][]int {
212
203
}
213
204
```
214
205
206
+ ### ** TypeScript**
207
+
208
+ ``` ts
209
+ function reconstructMatrix(
210
+ upper : number ,
211
+ lower : number ,
212
+ colsum : number [],
213
+ ): number [][] {
214
+ const n = colsum .length ;
215
+ const ans: number [][] = Array (2 )
216
+ .fill (0 )
217
+ .map (() => Array (n ).fill (0 ));
218
+ for (let j = 0 ; j < n ; ++ j ) {
219
+ if (colsum [j ] === 2 ) {
220
+ ans [0 ][j ] = ans [1 ][j ] = 1 ;
221
+ upper -- ;
222
+ lower -- ;
223
+ } else if (colsum [j ] === 1 ) {
224
+ if (upper > lower ) {
225
+ ans [0 ][j ] = 1 ;
226
+ upper -- ;
227
+ } else {
228
+ ans [1 ][j ] = 1 ;
229
+ lower -- ;
230
+ }
231
+ }
232
+ if (upper < 0 || lower < 0 ) {
233
+ break ;
234
+ }
235
+ }
236
+ return upper || lower ? [] : ans ;
237
+ }
238
+ ```
239
+
215
240
### ** ...**
216
241
217
242
```
0 commit comments