Skip to content

Commit b18a2f4

Browse files
authored
Create candy-crush.cpp
1 parent 7b3da65 commit b18a2f4

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

C++/candy-crush.cpp

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// Time: O((R * C)^2)
2+
// Space: O(1)
3+
4+
class Solution {
5+
public:
6+
vector<vector<int>> candyCrush(vector<vector<int>>& board) {
7+
const auto R = board.size(), C = board[0].size();
8+
bool changed = true;
9+
while (changed) {
10+
changed = false;
11+
for (int r = 0; r < R; ++r) {
12+
for (int c = 0; c + 2 < C; ++c) {
13+
auto v = abs(board[r][c]);
14+
if (v != 0 && v == abs(board[r][c + 1]) && v == abs(board[r][c + 2])) {
15+
board[r][c] = board[r][c + 1] = board[r][c + 2] = -v;
16+
changed = true;
17+
}
18+
}
19+
}
20+
for (int r = 0; r + 2 < R; ++r) {
21+
for (int c = 0; c < C; ++c) {
22+
auto v = abs(board[r][c]);
23+
if (v != 0 && v == abs(board[r + 1][c]) && v == abs(board[r + 2][c])) {
24+
board[r][c] = board[r + 1][c] = board[r + 2][c] = -v;
25+
changed = true;
26+
}
27+
}
28+
}
29+
for (int c = 0; c < C; ++c) {
30+
int i = R - 1;
31+
for (int r = R - 1; r >= 0; --r) {
32+
if (board[r][c] > 0) {
33+
board[i--][c] = board[r][c];
34+
}
35+
}
36+
while (i >= 0) {
37+
board[i--][c] = 0;
38+
}
39+
}
40+
}
41+
return board;
42+
}
43+
};

0 commit comments

Comments
 (0)