Skip to content

Commit 38124f4

Browse files
authored
Create 1914-cyclically-rotating-a-gridsubmissions.js
1 parent b01cade commit 38124f4

File tree

1 file changed

+65
-0
lines changed

1 file changed

+65
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
/**
2+
* @param {number[][]} grid
3+
* @param {number} k
4+
* @return {number[][]}
5+
*/
6+
var rotateGrid = function(grid, k) {
7+
var m = grid.length;
8+
var n = grid[0].length;
9+
10+
// step1: loop each layer
11+
var layer = Math.min(n/2, m/2);
12+
for(l = 0; l<layer; l++) {
13+
// step2: flat layer "l" into one-dimension array
14+
var cur = [];
15+
// top
16+
for(var j = l; j<n-l; j++)
17+
{
18+
cur.push(grid[l][j]);
19+
}
20+
// right
21+
for(var i = l+1; i<m-l; i++)
22+
{
23+
cur.push(grid[i][n-l-1]);
24+
}
25+
// bottom
26+
for(var j = n-l-2; j>=l; j--)
27+
{
28+
cur.push(grid[m-l-1][j]);
29+
}
30+
// left
31+
for(var i = m-l-2; i>l; i--)
32+
{
33+
cur.push(grid[i][l]);
34+
}
35+
36+
// step3: rotation (k%len) on one-dimension array
37+
var d = cur.length;
38+
var offset = k % d;
39+
cur = [...cur.slice(offset, d), ...cur.slice(0, offset)];
40+
41+
// step4: refill rotated array back to 2D array at current layer
42+
var index = 0;
43+
// top
44+
for(var j = l; j<n-l; j++)
45+
{
46+
grid[l][j] = cur[index++];
47+
}
48+
// right
49+
for(var i = l+1; i<m-l; i++)
50+
{
51+
grid[i][n-l-1] = cur[index++];
52+
}
53+
// bottom
54+
for(var j = n-l-2; j>=l; j--)
55+
{
56+
grid[m-l-1][j] = cur[index++];
57+
}
58+
// left
59+
for(var i = m-l-2; i>l; i--)
60+
{
61+
grid[i][l] = cur[index++];
62+
}
63+
}
64+
return grid;
65+
};

0 commit comments

Comments
 (0)