Hot100之矩阵

73矩阵置零

题目

思路解析

收集0位置所在的行和列

然后该行全部初始化为0

该列全部初始化为0

代码

复制代码
class Solution {
    public void setZeroes(int[][] matrix) {
        int m = matrix.length;
        int n = matrix[0].length;

        List<Integer> list1 = new ArrayList<>();
        List<Integer> list2 = new ArrayList<>();

        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (matrix[i][j] == 0) {
                    list1.add(i);
                    list2.add(j);
                }
            }
        }

        for (int temp : list1) {
            for (int i = 0; i < n; i++) {
                matrix[temp][i] = 0;
            }
        }

        for (int temp : list2) {
            for (int i = 0; i < m; i++) {
                matrix[i][temp] = 0;
            }
        }
    }
}

54螺旋矩阵

题目

思路解析

直接左右下左上

这样子循环遍历就好了

主要注意的是我们的边界处理问题

代码

复制代码
class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> ans = new ArrayList<>();
        if (matrix == null || matrix.length == 0 || matrix[0].length == 0) return ans;

        int up = 0, down = matrix.length - 1;
        int left = 0, right = matrix[0].length - 1;

        while (true) {

            for (int i = left; i <= right; i++) { // 左->右
                ans.add(matrix[up][i]);
            }

            if (++up > down) break;
            for (int i = up; i <= down; i++) { // 上->下
                ans.add(matrix[i][right]);
            }

            if (--right < left) break;
            for (int i = right; i >= left; i--) { // 右->左
                ans.add(matrix[down][i]);
            }

            if (--down < up) break;
            for (int i = down; i >= up; i--) { // 下->上
                ans.add(matrix[i][left]);
            }

            if (++left > right) break;
            
        }

        return ans;
    }
}

48旋转图像

题目

思路解析

辅助矩阵

我们clone一个矩阵辅助我们,然后根据公式计算

原地修改

如上图所示,一轮可以完成矩阵 4 个元素的旋转。因而,只要分别以矩阵左上角 1/4 的各元素为起始点执行以上旋转操作,即可完整实现矩阵旋转。

具体来看,当矩阵大小 n 为偶数时,取前 n/2 行、前 n/2 列的元素为起始点;

当矩阵大小 n 为奇数时,取前 n/2 行、前 (n+1)/2 列的元素为起始点

i=0,j=0
i=0,j=1
i=1,j=0
i=1,j=1

代码

辅助矩阵
复制代码
class Solution {
    public void rotate(int[][] matrix) {
        int n = matrix.length;
        // 深拷贝 matrix -> tmp
        int[][] tmp = new int[n][];
        for (int i = 0; i < n; i++)
            tmp[i] = matrix[i].clone();
        // 根据元素旋转公式,遍历修改原矩阵 matrix 的各元素
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                matrix[j][n - 1 - i] = tmp[i][j];
            }
        }
    }
}
原地修改
复制代码
class Solution {
    public void rotate(int[][] matrix) {
        int n = matrix.length;
        for (int i = 0; i < n / 2; i++) {
            
        for (int j = 0; j < (n + 1) / 2; j++) {
                int tmp = matrix[i][j];
                matrix[i][j] = matrix[n - 1 - j][i];
                matrix[n - 1 - j][i] = matrix[n - 1 - i][n - 1 - j];
                matrix[n - 1 - i][n - 1 - j] = matrix[j][n - 1 - i];
                matrix[j][n - 1 - i] = tmp;
            }
            
        }
    }
}

240搜索二维矩阵

题目

思路解析

灵神题解-排除法

我们从右上角开始

我们先通过每行最后一个位置来排除行

行排除完之后,我们再根据列最小的位置来排除列

代码

复制代码
class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        int i = 0;
        int j = matrix[0].length - 1; // 从右上角开始
        while (i < matrix.length && j >= 0) { // 还有剩余元素
            if (matrix[i][j] == target) {
                return true; // 找到 target
            }
            if (matrix[i][j] < target) {
                i++; // 这一行剩余元素全部小于 target,排除
            } else {
                j--; // 这一列剩余元素全部大于 target,排除
            }
        }
        return false;
    }
}
相关推荐
nihao5616 小时前
机器学习:阈值与混淆矩阵
人工智能·机器学习·矩阵
6Hzlia11 小时前
【Hot 100 刷题计划】 LeetCode 74. 搜索二维矩阵 | C++ 二分查找 (一维展开法)
c++·leetcode·矩阵
跨境麦香鱼11 小时前
2026 Pinterest账号运营攻略:多开养号与矩阵引流实战
大数据·人工智能·矩阵
AI科技星12 小时前
基于四维速率恒为c公设的北斗GEO卫星昼夜钟差模型修正与实测验证
开发语言·人工智能·线性代数·算法·数学建模
6Hzlia12 小时前
【Hot 100 刷题计划】 LeetCode 240. 搜索二维矩阵 II | C++ 巧妙利用单调性 (BST 法)
c++·leetcode·矩阵
Jasmine_llq2 天前
《B3865 [GESP202309 二级] 小杨的 X 字矩阵》
线性代数·矩阵·条件判断算法·枚举算法(遍历算法)·规律模拟算法
杰杰桀桀桀2 天前
4*4无时延矩阵键盘(非阻塞)--附代码链接
stm32·单片机·嵌入式硬件·矩阵·计算机外设·无时延矩阵键盘
阿Y加油吧2 天前
二分查找进阶:搜索二维矩阵 & 查找元素首尾位置 深度解析
线性代数·算法·矩阵
songyuc2 天前
【矩阵论】关于rank的几何解释:“观测者维度”
人工智能·矩阵
计算机安禾2 天前
【数据结构与算法】第33篇:交换排序(二):快速排序
c语言·开发语言·数据结构·数据库·算法·矩阵·排序算法