Candy Crush Posted on 2018-11-06 Descriptionhttps://leetcode.com/problems/candy-crush/ Solution123456789101112131415161718192021222324252627282930313233343536373839404142434445464748class Solution {public: vector<vector<int>> candyCrush(vector<vector<int>>& board) { int m = board.size(); int n = board[0].size(); while(true) { vector<pair<int, int>> del; for (int i = 0; i < m; ++i) { for (int j = 0; j < n; ++j) { if (board[i][j] == 0) continue; int upper = i + 1, lower = i -1; int lefter = j - 1, righter = j + 1; while(upper < m && upper - i < 3 && board[upper][j] == board[i][j]) ++upper; while(lower >= 0 && i - lower < 3 && board[lower][j] == board[i][j]) --lower; while(righter < n && righter - j < 3 && board[i][righter] == board[i][j]) ++righter; while(lefter >= 0 && j - lefter < 3 && board[i][lefter] == board[i][j]) --lefter; if (righter -lefter > 3 || upper - lower > 3) del.push_back(make_pair(i, j)); } } if (del.size() == 0) break; for (auto& item:del) board[item.first][item.second] = 0; //Begin erasing.... for (int j = 0; j < n; ++j) { vector<int> temp; for (int i = m - 1; i >= 0; --i) if(board[i][j] != 0) temp.push_back(board[i][j]); int k = m - 1; int index = 0; while(index < temp.size()) { board[k--][j] = temp[index++]; } while(k >= 0) board[k--][j] = 0; } } return board; }};