【LeetCode 手撕算法】(矩阵)73-矩阵置零、54-螺旋矩阵(贪吃蛇)、48-旋转图像

73-矩阵置零

给定一个 mxn 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用原地算法

复制代码
输入:matrix = [[1,1,1],[1,0,1],[1,1,1]]
输出:[[1,0,1],[0,0,0],[1,0,1]]
复制代码
输入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]
输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]

**思路:**先遍历查哪个是0,标记对应的行和列,重新遍历 若行列有一个符合,则将其置为0

java 复制代码
class Solution {
    public void setZeroes(int[][] matrix) {
        int m=matrix.length,n=matrix[0].length;
        boolean [] l=new boolean [m];
        boolean[] w=new boolean [n];
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                if(matrix[i][j]==0){l[i]=true;w[j]=true;}
            }
        }
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                if(l[i]||w[j]){matrix[i][j]=0;}
            }
        }
    }
}

**细节注意:**n=matrix0.length 列的取长要 0 ,不能为空。

行列标记用布尔最方便


54-螺旋矩阵(贪吃蛇)

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

复制代码
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]

思路:移动过程中会碰到边界或遇到已读,然后需要判断方向且变换方向。方向使用预留的四种,通过索引方式来回试 合适就走,使用已读visited矩阵标记已读。索引分四个方向,m和n放在一起,使用模4进行更新。

java 复制代码
class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        List <Integer> ans=new ArrayList<Integer>();//设置动态数组存结果
        
        int M=matrix.length;
        int N=matrix[0].length;
        boolean [][] visited=new boolean [M][N];//设置已读
        int [][] dir={{0,1},{1,0},{0,-1},{-1,0}};//四个方向:右下左上
        int m=0,n=0; //初始化第一个位置
        int index=0; //控制方向的索引
        for(int i=0;i<M*N;i++){
            ans.add(matrix[m][n]);//存当前值
            visited[m][n]=true;//将改值改为已读
            int nextm=m+dir[index][0];//查下一个是谁,不赋值给mn,纯试探来求index
            int nextn=n+dir[index][1];
            //判断下一个是否越界,求索引
            //不越界索引不变,越界则换方向,模4代表四个来回试
            if(nextm<0||nextm>=M||nextn<0||nextn>=N||visited[nextm][nextn]){
                index=(index+1)%4;
            }
            //执行新方向 
            m+=dir[index][0];
            n+=dir[index][1];
        }
        return ans;
        
    }
}

48-旋转图像

给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。

你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。

复制代码
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[[7,4,1],[8,5,2],[9,6,3]]
复制代码
输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]
输出:[[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]

**思路:**简单,矩阵从 i j 变成 j m-i-1 ,再换回来原矩阵

java 复制代码
class Solution {
    public void rotate(int[][] matrix) {
        int m=matrix.length;
        int n=matrix[0].length;
        int [][] matrix2=new int [m][n];
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                matrix2[j][m-i-1]=matrix[i][j];
            }
        }
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                matrix[i][j]=matrix2[i][j];
            }
        }
    }
}

编写一个高效的算法来搜索 m xn 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。

复制代码
输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5
输出:true
复制代码
输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 20
输出:false

**思路:**暴力解法,能解出来就行,我管你这呢那呢。

有序可以使用二分查找

java 复制代码
class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        int m=matrix.length;
        int n=matrix[0].length;
        boolean ans=false;
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                if(matrix[i][j]==target){
                    ans=true;}
            }
        }
        return ans;
    }
}
相关推荐
hhb_6182 分钟前
AIRAGDebug:一键定位RAG链路异常
人工智能·python·算法
朝朝辞暮i19 分钟前
C++ 第 6 课:switch —— 多状态选择
开发语言·c++·算法
苏打豆1 小时前
Pinocchio源码阅读——刚体运动物理量空间变换及求导
c++·线性代数·算法·矩阵·机器人
蜗牛互联网1 小时前
WSL Containers GA:本地AI容器的生命周期、网络与治理验收
java·网络·人工智能·后端
FluxArt1 小时前
GPT Image 2.5 中文提示词教程:Flux Art 可复用模板
前端·gpt·算法
思麟呀1 小时前
位运算:从一个整数到一个集合
c语言·数据结构·c++·算法
龙亘川2 小时前
铭记英烈守初心,数字强基促服务:亘川智城退役军人服务系统的实践与价值
java·数据库·人工智能
阜阳山君GEO2 小时前
豆包 SEED 新版本 GEO 优化:信源金字塔、打分体系与避坑落地指南
人工智能·算法
OxYGC2 小时前
[AI工程] Spring AI 第廿一篇:存量 REST 接口的 MCP 化改造实录——工具从哪条路径注册、参数描述怎么写、身份怎么过去
java·人工智能·spring
晓天衡宇•评测社区2 小时前
晓天衡宇亮相 2026 云栖大会:迈向更可信的高质量评测
人工智能·算法·机器学习