LeetCode 289 - Juego de la Vida

título Descripción

289. Juego de la Vida

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;
        }
    }
};
Publicados 152 artículos originales · ganado elogios 22 · Vistas a 30000 +

Supongo que te gusta

Origin blog.csdn.net/qq_38204302/article/details/105279887
Recomendado
Clasificación