File tree 1 file changed +43
-0
lines changed
1 file changed +43
-0
lines changed Original file line number Diff line number Diff line change
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
+ };
You can’t perform that action at this time.
0 commit comments