Skip to content

Commit 870dadb

Browse files
authored
Create shift-2d-grid.cpp
1 parent b75639e commit 870dadb

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed

C++/shift-2d-grid.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// Time: O(m * n)
2+
// Space: O(1)
3+
4+
class Solution {
5+
public:
6+
vector<vector<int>> shiftGrid(vector<vector<int>>& grid, int k) {
7+
rotate(&grid, k);
8+
return grid;
9+
}
10+
11+
private:
12+
void rotate(vector<vector<int>> *grid, int k) {
13+
k %= grid->size() * (*grid)[0].size();
14+
reverse(grid, 0, grid->size() * (*grid)[0].size());
15+
reverse(grid, 0, k);
16+
reverse(grid, k, grid->size() * (*grid)[0].size());
17+
}
18+
19+
void reverse(vector<vector<int>> *grid, int start, int end) {
20+
for (; start < end; ++start, --end) {
21+
int start_r = start / (*grid)[0].size();
22+
int start_c = start % (*grid)[0].size();
23+
int end_r = (end - 1) / (*grid)[0].size();
24+
int end_c = (end - 1) % (*grid)[0].size();
25+
swap((*grid)[start_r][start_c], (*grid)[end_r][end_c]);
26+
}
27+
}
28+
};

0 commit comments

Comments
 (0)