leetcode刷题 二维数组 八方向

news/2025/2/9 5:42:46 标签: leetcode, 算法, C

题目描述
在这里插入图片描述

输入:board = [[0,1,0],[0,0,1],[1,1,1],[0,0,0]]
输出:[[0,0,0],[1,0,1],[0,1,1],[0,1,0]]

题目分析:就是以二维数组某个元素为中心,寻找周围八个方向的元素,按照题目要求修改二维数组元素返回;
拷贝一份二维数组;

参数分析
void gameOfLife(int** board, int boardSize, int* boardColSize)

**board定义了一个指向整型变量指针的指针,就是二维数组的首地址
boardSize表示行; 4
boardColSize 表示列,每行有多少列 ;== 3

#define DIRECTION_NUM 8
#define DIRECTION_SIZE 2
int directions[DIRECTION_NUM][DIRECTION_SIZE] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}, {1, 1}, {1, -1}, {-1, 1}, {-1, -1}};

int JudgeLive(int **copyBoard, int rowSize, int colSize, int x, int y)
{
    int result = 0;
    for (int i = 0; i < DIRECTION_NUM; i++) {
        int tempX = x + directions[i][0];//每次按这个方向做偏移
        int tempY = y + directions[i][1];
        if (tempX < 0 || tempX >= rowSize || tempY < 0 || tempY >= colSize) {
            continue;
        } else {
            result += copyBoard[tempX][tempY];
        }
    }
    return result;
}

void gameOfLife(int** board, int boardSize, int* boardColSize){
    //外面大的申请一次
    int **copyBoard = (int **)malloc(sizeof(int *) * boardSize);
    //循环申请空间
    for (int i = 0; i < boardSize; i++) {
        copyBoard[i] = (int *)malloc(sizeof(int) * (*boardColSize));
    }
    //给copy的数组赋值
    for (int i= 0; i < boardSize; i++) {
        for (int j = 0; j < *boardColSize; j++) {
            copyBoard[i][j] = board[i][j];
        }
    }
    for (int i= 0; i < boardSize; i++) {
        for (int j = 0; j < *boardColSize; j++) {
            int result = JudgeLive(copyBoard, boardSize, *boardColSize, i, j);
            if (board[i][j] == 0 && result == 3) {
                board[i][j] = 1;
            }
            if (board[i][j] == 1 && (result < 2 || result > 3)) {
                board[i][j] = 0;
            }
        }
    }
}

http://www.niftyadmin.cn/n/5047862.html

相关文章

go mod tidy 报错:x509: certificate signed by unknown authority 最佳实践

最近在docker中运行了一个ubuntu20的系统&#xff0c;在上面运行golang程序&#xff0c;使用go mod tidy后报错&#xff1a; tls: failed to verify certificate: x509: certificate signed by unknown authority 如&#xff1a; go: finding module for package google.gol…

Stateflow

文章目录 概述打开 Stateflow 的方法方法一 方法二 概述 Stateflow 是由两个词构成的&#xff0c;State machine&#xff0c;Control flow。 State machine 指的是状态机&#xff0c;即离散状态之间根据不同的条件进行转移。每一个时刻&#xff0c;同一层次下&#xff0c;至少…

gateway之断言的使用详解

文章目录 gateway产生的背景&#xff0c;为什么要是用gateway什么是网关gateway 带来的好处功能特征gateway在项目中使用的依赖 什么是断言断言分类内置自定义示例 断言和过滤器的不同 gateway产生的背景&#xff0c;为什么要是用gateway 一个系统会被拆分为多个微服务&#x…

交错序列——差分:GZOI2023D2T3

单点修改&#xff0c;全局查询交错序列最大值&#xff08; max ⁡ ( ∑ i ( − 1 ) i b i ) \max(\sum_i (-1)^ib_i) max(∑i​(−1)ibi​)&#xff09;&#xff0c; b b b 为 a a a 的子序列 正常做法是线段树&#xff0c;但对于交错序列问题&#xff0c;有一种更好的方法&am…

【Postman-windows-9.12.2版本安装与汉化】

Postman-windows-9.12.2版本安装与汉化 想用英文版本的可以直接点击如下链接下载最新版本 官网最新版本(无法汉化)&#xff1a;https://www.postman.com/downloads/ 如果想要汉化的就不能使用最新版本&#xff0c;因为最新版本没有汉化包可以用 汉化包和postman的版本必须是…

SpringBoot启用禁用员工/员工分页查询/编辑员工 --苍穹外卖day3

启用禁用员工 Controller 路径参数前面加上Path~注解来获取参数 PostMapping("/status/{status}") ApiOperation("启用禁用员工") public Result StartOrStop(PathVariable("status") Integer status, Long id){log.info("启用禁用")…

【2023年11月第四版教材】第15章《风险管理》(第二部分)

第15章《风险管理》&#xff08;第二部分&#xff09; 3 管理过程4 管理ITTO汇总★★★ 3 管理过程 组过程定义作用规划1.规划风险管理定义如何实施项目风险管理活动的过程确保风险管理的水平、方法和可见度与项目风险程度相匹配,与对组织和其他干系人的重要程度相匹配2.识别风…

selenium不定位元素直接使用键盘操作(如弹框操作)

今天在使用selenium进行定位时&#xff0c;发现直接定位不了chrome的弹框&#xff0c;如这种弹框&#xff1a; 使用的是下面这行代码 driver.switch_to.alert.accept() 运行报错&#xff0c;说是没有 alert windown。。。。 啊&#xff1f;难道chrome的弹框不是用alert写的&…