标签:about -- rom div xpl eset int class turn
https://leetcode.com/problems/candy-crush/solution/ class Solution { public int[][] candyCrush(int[][] board) { int R = board.length, C = board[0].length; boolean todo = false; // reset // horizontal scan for (int r = 0; r < R; ++r) { for (int c = 0; c + 2 < C; ++c) { int v = Math.abs(board[r][c]); if ( v != 0 && v == Math.abs(board[r][c+1]) && v == Math.abs(board[r][c+2])) { board[r][c] = board[r][c+1] = board[r][c+2] = -v; todo = true; } } } // vertical scan for (int r = 0; r + 2 < R; ++r) { for (int c = 0; c < C; ++c) { int v = Math.abs(board[r][c]); if ( v != 0 && v == Math.abs(board[r+1][c]) && v == Math.abs(board[r+2][c])) { board[r][c] = board[r+1][c] = board[r+2][c] = -v; todo = true; } } } // gravity steps for (int c = 0; c < C; ++c) { int wr = R - 1; // write and read from the bottom, for (int r = R-1; r >= 0; --r) // moves the wr to the first candy(negative number ) we see from the bottom, // r moves all the time , until r is positive number , and we repalce wr with r value, and move wr up. if (board[r][c] > 0) board[wr--][c] = board[r][c]; // after r reached 0, if wr is not reached 0 yet, we fill the wr with 0 while (wr >= 0) board[wr--][c] = 0; } // check if we need to do this again return todo ? candyCrush(board) : board; } }
This question is about implementing a basic elimination algorithm for Candy Crush.
Given a 2D integer array board
representing the grid of candy, different positive integers board[i][j]
represent different types of candies. A value of board[i][j] = 0
represents that the cell at position (i, j)
is empty. The given board represents the state of the game following the player‘s move. Now, you need to restore the board to a stable state by crushing candies according to the following rules:
You need to perform the above rules until the board becomes stable, then return the current board.
Example:
Input: board = [[110,5,112,113,114],[210,211,5,213,214],[310,311,3,313,314],[410,411,412,5,414],[5,1,512,3,3],[610,4,1,613,614],[710,1,2,713,714],[810,1,2,1,1],[1,1,2,2,2],[4,1,4,4,1014]] Output: [[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[110,0,0,0,114],[210,0,0,0,214],[310,0,0,113,314],[410,0,0,213,414],[610,211,112,313,614],[710,311,412,613,714],[810,411,512,713,1014]] Explanation:
Note:
board
will be in the range [3, 50].board[i]
will be in the range [3, 50].board[i][j]
will initially start as an integer in the range [1, 2000].标签:about -- rom div xpl eset int class turn
原文地址:https://www.cnblogs.com/tobeabetterpig/p/9929765.html