Skip to content

Commit 2b57a4d

Browse files
committed
😢 [54] wtf
1 parent 3529def commit 2b57a4d

File tree

2 files changed

+61
-151
lines changed

2 files changed

+61
-151
lines changed

54/my_solution.js

+45-98
Original file line numberDiff line numberDiff line change
@@ -3,102 +3,38 @@
33
* @return {number[]}
44
*/
55
const spiralOrder = (matrix) => {
6-
if (matrix.length === 1) return matrix[0];
7-
let nextDirection = new Map(), formula = new Map();
8-
nextDirection.set("r", "b")
9-
nextDirection.set("b", "l")
10-
nextDirection.set("l", "t")
11-
nextDirection.set("t", "r")
12-
13-
formula.set("r", { r: 0, c: 1 })
14-
formula.set("b", { r: 1, c: 0 })
15-
formula.set("l", { r: 0, c: -1 })
16-
formula.set("t", { r: -1, c: 0 })
17-
18-
console.log(nextDirection)
19-
console.log(formula)
20-
21-
let spiralList = [];
22-
23-
const moveNext = (r, c, dir) => {
24-
let nextDir = nextDirection.get(dir);
25-
let { r: newR, c: newC } = formula.get(nextDir);
26-
console.log(`>> Going nextDir:${nextDir}, newR:${r + newR + (r === matrix.length ? -1 : 0)}, newC:${c + newC + (c === matrix[0].length ? -1 : 0)}`)
27-
// let isREdge = r > matrix.length, isCEdge = c > matrix[0].length;
28-
// console.log("matrix[0].length ")
29-
// console.log(matrix[0].length)
30-
31-
newR += r + (r === matrix.length ? -1 : 0) + (r < 0 ? 1 : 0)
32-
newC += c + (c === matrix[0].length ? -1 : 0) + (c < 0 ? 1 : 0)
33-
34-
return { r: newR, c: newC, dir: nextDir };
35-
}
6+
let left = 0, right = matrix[0].length, top = 0, bot = matrix.length, spiralList = [];
7+
8+
while (left < right && top < bot) {
9+
for (let i = left; i < right; i++) {
10+
spiralList.push(matrix[top][i]);
11+
}
12+
top += 1;
13+
14+
if (left >= right || top >= bot) {
15+
console.log("??")
16+
break;
17+
}
3618

37-
const explore = (r, c, dir, tBorder, rBorder, bBorder, lBorder) => {
38-
console.log(`> r:${r}, c:${c}, dir:${dir}, tBorder:${tBorder}, rBorder:${rBorder}, bBorder:${bBorder}, lBorder:${lBorder}`)
39-
40-
// edge
41-
console.log(r - bBorder === matrix.length)
42-
console.log(c - rBorder === matrix[0].length)
43-
console.log((dir === "t" && r < 0 + tBorder))
44-
console.log((dir === "l" && c < 0 + lBorder))
45-
console.log((dir === "r" && c + rBorder === matrix[0].length))
46-
console.log((dir === "b" && r + bBorder === matrix.length))
47-
if (
48-
r - bBorder === matrix.length ||
49-
c - rBorder === matrix[0].length ||
50-
(dir === "t" && r < 0 + tBorder) ||
51-
(dir === "l" && c < 0 + lBorder) ||
52-
(dir === "r" && c + rBorder === matrix[0].length) ||
53-
(dir === "b" && r + bBorder === matrix.length)
54-
) {
55-
let next = moveNext(r, c, dir);
56-
57-
explore(
58-
next.r + (next.dir === "r" ? tBorder : 0) + (next.dir === "l" ? -bBorder : 0),
59-
next.c + (next.dir === "b" ? -rBorder : 0) + (next.dir === "t" ? lBorder : 0),
60-
next.dir,
61-
tBorder + (next.dir === "r" ? 1 : 0),
62-
rBorder + (next.dir === "b" ? 1 : 0),
63-
bBorder + (next.dir === "l" ? 1 : 0),
64-
lBorder + (next.dir === "t" ? 1 : 0));
65-
return;
19+
for (let i = top; i < bot; i++) {
20+
spiralList.push(matrix[i][right - 1]);
6621
}
22+
right -= 1;
6723

68-
// visited - end
69-
// if (matrix.length < tries) {
70-
// return;
71-
// }
72-
73-
if (Infinity === matrix[r][c]) {
74-
// let next = moveNext(r, c, dir);
75-
// explore(next.r, next.c, next.dir, tries + 1);
76-
77-
// let nextDir = nextDirection.get(dir);
78-
// let { r: newR, c: newC } = formula.get(nextDir);
79-
// console.log(`>> Going newR:${r + newR + (r === matrix.length ? -1 : 0)}, newC:${c + newC + (c === matrix[0].length ? -1 : 0)}`)
80-
// // let isREdge = r > matrix.length, isCEdge = c > matrix[0].length;
81-
// console.log("matrix[0].length ")
82-
// console.log(matrix[0].length)
83-
//
84-
// newR += r + (r === matrix.length ? -1 : 0) + (r < 0 ? 1 : 0) - ((formula.get(dir).r));
85-
// newC += c + (c === matrix[0].length ? -1 : 0) + (c < 0 ? 1 : 0) - ((formula.get(dir).c));
86-
//
87-
// explore(newR, newC, nextDir, tBorder, rBorder, bBorder, lBorder);
88-
return;
24+
25+
for (let i = right - 1; i >= left; i--) {
26+
spiralList.push(matrix[bot - 1][i]);
8927
}
28+
bot -= 1;
9029

91-
spiralList.push(matrix[r][c]);
92-
matrix[r][c] = Infinity;
30+
for (let i = bot - 1; i >= top; i--) {
31+
spiralList.push(matrix[i][left]);
32+
}
33+
left += 1;
9334

94-
let dirFormula = formula.get(dir);
95-
// console.log(`> r:${r}, c:${c}, addR:${dirFormula.r}, addC:${dirFormula.c}`)
96-
// if next we turn
97-
// matrix[r + dirFormula.r][c + dirFormula.c];
98-
explore(r + dirFormula.r, c + dirFormula.c, dir, tBorder, rBorder, bBorder, lBorder)
35+
console.log(`> l:${left}, r:${right}, t:${top}, b:${bot}`)
9936
}
10037

101-
explore(0, 0, "r", 1, 0, 0, 0);
10238
console.log(matrix)
10339
return spiralList;
10440
};
@@ -120,13 +56,13 @@ let x = null;
12056
// ]);
12157

12258
// [1,2,3,4,5,10,15,20,25,24,23,22,21,16,11,6,7,8,9,14,19,18,17,12,13]
123-
x = spiralOrder([
124-
[1, 2, 3, 4, 5],
125-
[6, 7, 8, 9, 10],
126-
[11, 12, 13, 14, 15],
127-
[16, 17, 18, 19, 20],
128-
[21, 22, 23, 24, 25]
129-
]);
59+
// x = spiralOrder([
60+
// [1, 2, 3, 4, 5],
61+
// [6, 7, 8, 9, 10],
62+
// [11, 12, 13, 14, 15],
63+
// [16, 17, 18, 19, 20],
64+
// [21, 22, 23, 24, 25]
65+
// ]);
13066

13167
// x = spiralOrder([[1]]);
13268

@@ -139,10 +75,21 @@ x = spiralOrder([
13975
// ]);
14076

14177
// [1,2,3,4,8,12,11,10,9,5,6,7]
78+
x = spiralOrder([
79+
[1, 2, 3, 4],
80+
[5, 6, 7, 8],
81+
[9, 10, 11, 12]
82+
]);
83+
14284
// x = spiralOrder([
143-
// [1, 2, 3, 4],
144-
// [5, 6, 7, 8],
145-
// [9, 10, 11, 12]
85+
// [1, 2, 3, 4]
86+
// ]);
87+
88+
// x = spiralOrder([
89+
// [1],
90+
// [2],
91+
// [3],
92+
// [4]
14693
// ]);
14794

14895
// [1,2,3,6,9,8,7,4,5]

54/solution.js

+16-53
Original file line numberDiff line numberDiff line change
@@ -3,68 +3,31 @@
33
* @return {number[]}
44
*/
55
const spiralOrder = (matrix) => {
6-
if (matrix.length === 1) return matrix[0];
6+
let left = 0, right = matrix[0].length, top = 0, bot = matrix.length, spiralList = [];
77

8-
let nextDirection = new Map(), formula = new Map();
9-
nextDirection.set("r", "b")
10-
nextDirection.set("b", "l")
11-
nextDirection.set("l", "t")
12-
nextDirection.set("t", "r")
13-
14-
formula.set("r", { r: 0, c: 1 })
15-
formula.set("b", { r: 1, c: 0 })
16-
formula.set("l", { r: 0, c: -1 })
17-
formula.set("t", { r: -1, c: 0 })
18-
19-
let spiralList = [];
20-
21-
const moveNext = (r, c, dir) => {
22-
let nextDir = nextDirection.get(dir);
23-
let { r: newR, c: newC } = formula.get(nextDir);
24-
25-
newR += r + (r === matrix.length ? -1 : 0) + (r < 0 ? 1 : 0)
26-
newC += c + (c === matrix[0].length ? -1 : 0) + (c < 0 ? 1 : 0)
27-
28-
return { r: newR, c: newC, dir: nextDir };
29-
}
30-
31-
const explore = (r, c, dir, tries) => {
32-
// edge
33-
if (
34-
r === matrix.length ||
35-
c === matrix[0].length ||
36-
r < 0 ||
37-
c < 0
38-
) {
39-
let next = moveNext(r, c, dir);
40-
explore(next.r, next.c, next.dir, tries);
41-
return;
8+
while (left < right && top < bot) {
9+
for (let i = left; i < right; i++) {
10+
spiralList.push(matrix[top][i]);
4211
}
12+
top += 1;
4313

44-
// visited - end
45-
if (matrix.length < tries) {
46-
return;
14+
for (let i = top; i < bot; i++) {
15+
spiralList.push(matrix[i][right - 1]);
4716
}
17+
right -= 1;
4818

49-
if (Infinity === matrix[r][c]) {
50-
51-
let nextDir = nextDirection.get(dir);
52-
let { r: newR, c: newC } = formula.get(nextDir);
53-
54-
newR += r + (r === matrix.length ? -1 : 0) + (r < 0 ? 1 : 0) - ((formula.get(dir).r));
55-
newC += c + (c === matrix[0].length ? -1 : 0) + (c < 0 ? 1 : 0) - ((formula.get(dir).c));
19+
if (left >= right || top >= bot) break;
5620

57-
explore(newR, newC, nextDir, tries + 1);
58-
return;
21+
for (let i = right - 1; i >= left; i--) {
22+
spiralList.push(matrix[bot - 1][i]);
5923
}
24+
bot -= 1;
6025

61-
spiralList.push(matrix[r][c]);
62-
matrix[r][c] = Infinity;
63-
64-
let dirFormula = formula.get(dir);
65-
explore(r + dirFormula.r, c + dirFormula.c, dir, tries)
26+
for (let i = bot - 1; i >= top; i--) {
27+
spiralList.push(matrix[i][left]);
28+
}
29+
left += 1;
6630
}
6731

68-
explore(0, 0, "r", 0);
6932
return spiralList;
7033
};

0 commit comments

Comments
 (0)