título Descripción
solución:
Aquí para hablar de manipulación de bits Kazajstán:
Un int representaron el 32, 0, 1, pero sólo uno, podemos hacer uso de todo el resto de los dígitos hacer marca. Específicamente, mediante el uso de sólo la segunda lata,
. 1 regla : el original 01, el número de células viables es menor que aproximadamente 2, un desplazamiento a la derecha es 0
regla 2 : el original 01, el número de células viables es igual a aproximadamente 2, o 3,01 o 10 es de 11, uno es derecho 1.
Regla 3 : el original es 01, el número de células que rodea a una mayor supervivencia de 3, el más adecuado es 0
regla 4 : el original es 00, igual al número de la supervivencia celular alrededor de 3,00 o 10 es 10, es un derecho
Realmente era una operación de dios! !
class Solution {
public:
void gameOfLife(vector<vector<int>>& board) {
int dx[] = {-1, 0, 1, -1, 1, -1, 0, 1};
int dy[] = {-1, -1, -1, 0, 0, 1, 1, 1};
for(int i=0;i<board.size();i++)
{
for(int j=0;j<board[0].size();j++)
{
int sum = 0;
for(int k=0;k<8;k++)
{
int nx = i + dx[k];
int ny = j + dy[k];
if((nx>=0 && nx<board.size()) && (ny>=0 && ny<board[0].size()))
sum += (board[nx][ny]&1); // 只累加最低位
}
if(board[i][j]==1)
{
if(sum==2 || sum==3) board[i][j] |= 2; // 使用第二个bit标记是否存活
}
else
{
if(sum==3) board[i][j] |= 2;
}
}
}
for(int i=0;i<board.size();i++)
{
for(int j=0;j<board[0].size();j++)
board[i][j] >>= 1;
}
}
};