算法题-矩阵

一、矩阵

1. 二维数组坐标定义

模板 A:逐格双层遍历(判重、状态统计类题目)

适用:有效数独、矩阵置零、生命游戏

java 复制代码
int m = matrix.length;      // m = 总行数,i:行下标(上下)
int n = matrix[0].length;   // n = 总列数,j:列下标(左右)
matrix[i][j]; // i先行,j后列
// 从上到下遍历每一行
for(int i = 0; i < m; i++){
    // 从左到右遍历一行内每一列
    for(int j = 0; j < n; j++){
        // 操作 matrix[i][j]
    }
}

2.矩阵置零

java 复制代码
// 矩阵置零示范思路
boolean[] rowFlag = new boolean[m];
boolean[] colFlag = new boolean[n];
// 第一轮:只标记,不改原矩阵
for(i,j){
    if(matrix[i][j]==0){
        rowFlag[i]=true;
        colFlag[j]=true;
    }
}
// 第二轮:依据标记统一修改
for(i,j){
    if(rowFlag[i] || colFlag[j]) matrix[i][j]=0;
}

3. 36有效的数独

核心:用数组 / Set 充当哈希表,记录「行、列、指定区域」出现过哪些数字 套路:

  1. 双层循环遍历每个格子
  2. 遇到有效数字,先判断是否已经存在
  3. 不存在就打上标记;存在直接返回结果 推荐最优模板(boolean 数组法)
java 复制代码
boolean[][] rowHas = new boolean[9][9];
boolean[][] colHas = new boolean[9][9];
boolean[][][] boxHas = new boolean[3][3][9];

for(int i=0;i<9;i++){
    for(int j=0;j<9;j++){
        char c = board[i][j];
        if(c == '.') continue;
        int x = c - '1';
        // i/3  j/3 定位3×3小九宫
        if(rowHas[i][x] || colHas[j][x] || boxHas[i/3][j/3][x]){
            return false;
        }
        rowHas[i][x] = colHas[j][x] = boxHas[i/3][j/3][x] = true;
    }
}
相关推荐
启观川8 小时前
数据结构与算法 -第 3 章 常用算法-动态规划
数据结构·笔记·python·算法
码爸8 小时前
排序算法介绍
python·算法·排序算法
动词ing10 小时前
【题目练习】算法 组合总和||
算法
longlongzihan10 小时前
链表找环:Floyd 判圈算法(LeetCode 141 & 142 )
c++·算法·leetcode·链表
专业程序开发源10 小时前
flask家电故障预测系统92491-计算机课程设计/毕业设计
vscode·python·sql·算法·flask·课程设计
Logic10110 小时前
C语言/数据结构欧几里得算法题解:长方形切割最大正方形——贪心划分计数
c语言·数据结构·算法·贪心算法·时间复杂度·空间复杂度·欧几里得算法
yi01110 小时前
LeetCode 643. 子数组最大平均数 I|从暴力枚举到滑动窗口
人工智能·笔记·python·算法·leetcode·滑动窗口
极光通讯11 小时前
服务器内存来料检验(IQC)实操:批次追溯、外观判定与上机验证
java·服务器·算法
淡海水11 小时前
02-04-原理篇-GC Roots与对象图遍历
算法·unity·c#·图·gc·遍历·roots
ClickHouseDB11 小时前
ClickHouse 大规模 OpenTelemetry 数据接入架构的可靠性演进
算法