• 289. 生命游戏


    不需要开出额外的数组,巧妙地存储答案,值得记录一下。但是注意这个方法只能应用在原数组为0,1的情况下

    class Solution {
    public:
        int f[2][8] = {{1, -1, 0, 0, 1, -1, 1, -1},
                       {1, -1, 1, -1, -1, 1, 0, 0}};
    
        void gameOfLife(vector<vector<int>>& board) {
            int len1, len2;
            len1 = board.size();
            
            if(!len1) {
                return ;
            }
    
            int i, j, ret;
    
            len2 = board[0].size();
            for(i = 0; i < len1; i++) {
                for(j = 0; j < len2; j++) {
                    ret = cal(board, i, j);
                    if(board[i][j] == 0) {
                        if(ret == 3) {
                            board[i][j] += 2;
                        }
                    }
                    else {
                        if(ret == 2 || ret == 3) {
                            board[i][j] += 2;
                        }
                    }
                }
            }
    
            for(i = 0; i < len1; i++) {
                for(j = 0; j < len2; j++) {
                    board[i][j] >>= 1;
                }
            }
        }
    
        int cal(vector<vector<int>>& board, int x, int y) {
            int ans = 0;
            for(int i = 0; i < 8; i++) {
                int tx = x + f[0][i];
                int ty = y + f[1][i];
                if(tx >= 0 && ty >= 0 && tx < board.size() && ty < board[0].size()) {
                    ans += (board[tx][ty] & 1);
                }
            }
            return ans;
        }
    };
    /*
    题目本身并不难,这个题最巧妙的地方在于空间的节省,不需要开放额外的数组,通过位移运算符,
    第0位为原来的值,而我们的答案存储在第一位,这样在最后输出的时候,输出第一位的值就可以了
    */
  • 相关阅读:
    Java-16 常用包装类
    Java-15 String类
    flask实现web端微信登录
    Flask-excel导出数据
    Java-14 单例模式
    Java-13 接口
    Java-12 抽象类
    结对项目:一个自动生成小学四则运算题目的命令行程序(c++)
    软工作业:第一次个人项目作业
    操作系统笔记一:操作系统引论
  • 原文地址:https://www.cnblogs.com/letlifestop/p/12617618.html
Copyright © 2020-2023  润新知