Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 3120cfe

Browse files
feat: add solutions to lc problem: No.3311 (doocs#3607)
No.3311.Construct 2D Grid Matching Graph Layout
1 parent a0d941e commit 3120cfe

File tree

7 files changed

+980
-6
lines changed

7 files changed

+980
-6
lines changed

‎solution/3300-3399/3311.Construct 2D Grid Matching Graph Layout/README.md‎

Lines changed: 328 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /