@@ -92,25 +92,350 @@ edit_url: https://github.com/doocs/leetcode/edit/main/solution/3300-3399/3311.Co
9292#### Python3
9393
9494``` python
95-
95+ class Solution :
96+ def constructGridLayout (self , n : int , edges : List[List[int ]]) -> List[List[int ]]:
97+ g = [[] for _ in range (n)]
98+ for u, v in edges:
99+ g[u].append(v)
100+ g[v].append(u)
101+ deg = [- 1 ] * 5
102+ for x, ys in enumerate (g):
103+ deg[len (ys)] = x
104+ if deg[1 ] != - 1 :
105+ row = [deg[1 ]]
106+ elif deg[4 ] == - 1 :
107+ x = deg[2 ]
108+ for y in g[x]:
109+ if len (g[y]) == 2 :
110+ row = [x, y]
111+ break
112+ else :
113+ x = deg[2 ]
114+ row = [x]
115+ pre = x
116+ x = g[x][0 ]
117+ while len (g[x]) > 2 :
118+ row.append(x)
119+ for y in g[x]:
120+ if y != pre and len (g[y]) < 4 :
121+ pre = x
122+ x = y
123+ break
124+ row.append(x)
125+
126+ ans = [row]
127+ vis = [False ] * n
128+ for _ in range (n // len (row) - 1 ):
129+ for x in row:
130+ vis[x] = True
131+ nxt = []
132+ for x in row:
133+ for y in g[x]:
134+ if not vis[y]:
135+ nxt.append(y)
136+ break
137+ ans.append(nxt)
138+ row = nxt
139+ return ans
96140```
97141
98142#### Java
99143
100144``` java
101-
145+ class Solution {
146+ public int [][] constructGridLayout (int n , int [][] edges ) {
147+ List<Integer > [] g = new List [n];
148+ Arrays . setAll(g, k - > new ArrayList<> ());
149+ for (int [] e : edges) {
150+ int u = e[0 ], v = e[1 ];
151+ g[u]. add(v);
152+ g[v]. add(u);
153+ }
154+
155+ int [] deg = new int [5 ];
156+ Arrays . fill(deg, - 1 );
157+
158+ for (int x = 0 ; x < n; x++ ) {
159+ deg[g[x]. size()] = x;
160+ }
161+
162+ List<Integer > row = new ArrayList<> ();
163+ if (deg[1 ] != - 1 ) {
164+ row. add(deg[1 ]);
165+ } else if (deg[4 ] == - 1 ) {
166+ int x = deg[2 ];
167+ for (int y : g[x]) {
168+ if (g[y]. size() == 2 ) {
169+ row. add(x);
170+ row. add(y);
171+ break ;
172+ }
173+ }
174+ } else {
175+ int x = deg[2 ];
176+ row. add(x);
177+ int pre = x;
178+ x = g[x]. get(0 );
179+ while (g[x]. size() > 2 ) {
180+ row. add(x);
181+ for (int y : g[x]) {
182+ if (y != pre && g[y]. size() < 4 ) {
183+ pre = x;
184+ x = y;
185+ break ;
186+ }
187+ }
188+ }
189+ row. add(x);
190+ }
191+
192+ List<List<Integer > > res = new ArrayList<> ();
193+ res. add(new ArrayList<> (row));
194+
195+ boolean [] vis = new boolean [n];
196+ int rowSize = row. size();
197+ for (int i = 0 ; i < n / rowSize - 1 ; i++ ) {
198+ for (int x : row) {
199+ vis[x] = true ;
200+ }
201+ List<Integer > nxt = new ArrayList<> ();
202+ for (int x : row) {
203+ for (int y : g[x]) {
204+ if (! vis[y]) {
205+ nxt. add(y);
206+ break ;
207+ }
208+ }
209+ }
210+ res. add(new ArrayList<> (nxt));
211+ row = nxt;
212+ }
213+
214+ int [][] ans = new int [res. size()][rowSize];
215+ for (int i = 0 ; i < res. size(); i++ ) {
216+ for (int j = 0 ; j < rowSize; j++ ) {
217+ ans[i][j] = res. get(i). get(j);
218+ }
219+ }
220+ return ans;
221+ }
222+ }
102223```
103224
104225#### C++
105226
106227``` cpp
107-
228+ class Solution {
229+ public:
230+ vector<vector<int >> constructGridLayout(int n, vector<vector<int >>& edges) {
231+ vector<vector<int >> g(n);
232+ for (auto& e : edges) {
233+ int u = e[ 0] , v = e[ 1] ;
234+ g[ u] .push_back(v);
235+ g[ v] .push_back(u);
236+ }
237+
238+ vector<int> deg(5, -1);
239+ for (int x = 0; x < n; ++x) {
240+ deg[g[x].size()] = x;
241+ }
242+
243+ vector<int > row;
244+ if (deg[1 ] != -1 ) {
245+ row.push_back(deg[1]);
246+ } else if (deg[4] == -1) {
247+ int x = deg[2];
248+ for (int y : g[x]) {
249+ if (g[y].size() == 2) {
250+ row.push_back(x);
251+ row.push_back(y);
252+ break;
253+ }
254+ }
255+ } else {
256+ int x = deg[2];
257+ row.push_back(x);
258+ int pre = x;
259+ x = g[x][0];
260+ while (g[x].size() > 2) {
261+ row.push_back(x);
262+ for (int y : g[x]) {
263+ if (y != pre && g[y].size() < 4) {
264+ pre = x;
265+ x = y;
266+ break;
267+ }
268+ }
269+ }
270+ row.push_back(x);
271+ }
272+
273+ vector<vector<int>> ans;
274+ ans.push_back(row);
275+ vector<bool> vis(n, false);
276+ int rowSize = row.size();
277+ for (int i = 0; i < n / rowSize - 1; ++i) {
278+ for (int x : row) {
279+ vis[x] = true;
280+ }
281+ vector<int> nxt;
282+ for (int x : row) {
283+ for (int y : g[x]) {
284+ if (!vis[y]) {
285+ nxt.push_back(y);
286+ break;
287+ }
288+ }
289+ }
290+ ans.push_back(nxt);
291+ row = nxt;
292+ }
293+
294+ return ans;
295+ }
296+ };
108297```
109298
110299#### Go
111300
112301``` go
302+ func constructGridLayout (n int , edges [][]int ) [][]int {
303+ g := make ([][]int , n)
304+ for _ , e := range edges {
305+ u , v := e[0 ], e[1 ]
306+ g[u] = append (g[u], v)
307+ g[v] = append (g[v], u)
308+ }
309+
310+ deg := make ([]int , 5 )
311+ for i := range deg {
312+ deg[i] = -1
313+ }
314+
315+ for x := 0 ; x < n; x++ {
316+ deg[len (g[x])] = x
317+ }
318+
319+ var row []int
320+ if deg[1 ] != -1 {
321+ row = append (row, deg[1 ])
322+ } else if deg[4 ] == -1 {
323+ x := deg[2 ]
324+ for _ , y := range g[x] {
325+ if len (g[y]) == 2 {
326+ row = append (row, x, y)
327+ break
328+ }
329+ }
330+ } else {
331+ x := deg[2 ]
332+ row = append (row, x)
333+ pre := x
334+ x = g[x][0 ]
335+ for len (g[x]) > 2 {
336+ row = append (row, x)
337+ for _ , y := range g[x] {
338+ if y != pre && len (g[y]) < 4 {
339+ pre = x
340+ x = y
341+ break
342+ }
343+ }
344+ }
345+ row = append (row, x)
346+ }
347+
348+ ans := [][]int {row}
349+ vis := make ([]bool , n)
350+ rowSize := len (row)
351+ for i := 0 ; i < n/rowSize-1 ; i++ {
352+ for _ , x := range row {
353+ vis[x] = true
354+ }
355+ nxt := []int {}
356+ for _ , x := range row {
357+ for _ , y := range g[x] {
358+ if !vis[y] {
359+ nxt = append (nxt, y)
360+ break
361+ }
362+ }
363+ }
364+ ans = append (ans, nxt)
365+ row = nxt
366+ }
367+
368+ return ans
369+ }
370+ ```
113371
372+ #### TypeScript
373+
374+ ``` ts
375+ function constructGridLayout(n : number , edges : number [][]): number [][] {
376+ const g: number [][] = Array .from ({ length: n }, () => []);
377+ for (const [u, v] of edges ) {
378+ g [u ].push (v );
379+ g [v ].push (u );
380+ }
381+
382+ const deg: number [] = Array (5 ).fill (- 1 );
383+ for (let x = 0 ; x < n ; x ++ ) {
384+ deg [g [x ].length ] = x ;
385+ }
386+
387+ let row: number [] = [];
388+ if (deg [1 ] !== - 1 ) {
389+ row .push (deg [1 ]);
390+ } else if (deg [4 ] === - 1 ) {
391+ let x = deg [2 ];
392+ for (const y of g [x ]) {
393+ if (g [y ].length === 2 ) {
394+ row .push (x , y );
395+ break ;
396+ }
397+ }
398+ } else {
399+ let x = deg [2 ];
400+ row .push (x );
401+ let pre = x ;
402+ x = g [x ][0 ];
403+ while (g [x ].length > 2 ) {
404+ row .push (x );
405+ for (const y of g [x ]) {
406+ if (y !== pre && g [y ].length < 4 ) {
407+ pre = x ;
408+ x = y ;
409+ break ;
410+ }
411+ }
412+ }
413+ row .push (x );
414+ }
415+
416+ const ans: number [][] = [row ];
417+ const vis: boolean [] = Array (n ).fill (false );
418+ const rowSize = row .length ;
419+
420+ for (let i = 0 ; i < Math .floor (n / rowSize ) - 1 ; i ++ ) {
421+ for (const x of row ) {
422+ vis [x ] = true ;
423+ }
424+ const nxt: number [] = [];
425+ for (const x of row ) {
426+ for (const y of g [x ]) {
427+ if (! vis [y ]) {
428+ nxt .push (y );
429+ break ;
430+ }
431+ }
432+ }
433+ ans .push (nxt );
434+ row = nxt ;
435+ }
436+
437+ return ans ;
438+ }
114439```
115440
116441<!-- tabs:end -->
0 commit comments