【LeetCode 热题 100】矩阵置零 / 螺旋矩阵 / 旋转图像 / 搜索二维矩阵 II

⭐️个人主页:@小羊 ⭐️所属专栏:LeetCode 热题 100 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~

目录


矩阵

矩阵置零

用两个数组分别标记行和列,判断这一行和这一列有没有出现0。

cpp 复制代码
class Solution {
public:
    void setZeroes(vector<vector<int>>& matrix) {
        int m = matrix.size(), n = matrix[0].size();
        vector<int> row(m), col(n);
        for (int i = 0; i < m; i++)
        {
            for (int j = 0; j < n; j++)
            {
                if (matrix[i][j] == 0)
                {
                    row[i] = 1;
                    col[j] = 1;
                }
            }
        }
        for (int i = 0; i < m; i++)
        {
            for (int j = 0; j < n; j++)
            {
                if (row[i] || col[j])
                {
                    matrix[i][j] = 0;
                }
            }
        } 
    }
};

螺旋矩阵

用方向数组来转换方向,当遇到边界、或这个位置已经遍历过了,就是变换方向的时候。

cpp 复制代码
class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
        int m = matrix.size(), n = matrix[0].size();
        vector<vector<bool>> used(m, vector<bool>(n));
        vector<int> res(m * n);
        int a = 0, b = 0, d = 1;
        for (int i = 0; i < m * n; i++)
        {
            used[a][b] = true;
            res[i] = matrix[a][b];
            int x = a + dx[d], y = b + dy[d];
            if (x < 0 || x == m || y < 0 || y == n || used[x][y])
            {
                d = (d + 1) % 4;
                x = a + dx[d], y = b + dy[d];
            }
            a = x, b = y;
        }
        return res;
    }
};

旋转图像

纯纯找规律题。先正对角线交换,然后逐行反转。

cpp 复制代码
class Solution {
public:
    void rotate(vector<vector<int>>& matrix) {
        int m = matrix.size(), n = matrix[0].size();
        for (int i = 0; i < m; i++)
        {
            for (int j = 0; j < i; j++)
            {
                swap(matrix[i][j], matrix[j][i]);
            }
        }
        for (int i = 0; i < m; i++)
        {
            reverse(matrix[i].begin(), matrix[i].end());
        } 
    }
};

搜索二维矩阵 II

仔细观察发现,从右上角看这个矩阵近似一个搜索二叉树,那就可以像查找二叉搜索树那样查找目标值。

cpp 复制代码
class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        int m = matrix.size(), n = matrix[0].size();
        int x = 0, y = n - 1;
        while (x < m && y >= 0)
        {
            if (target < matrix[x][y]) y--;
            else if (target > matrix[x][y]) x++;
            else return true;
        }
        return false;
    }
};

本篇文章的分享就到这里了,如果您觉得在本文有所收获,还请留下您的三连支持哦~

相关推荐
java修仙传13 分钟前
力扣hot100:划分字母区间
算法·leetcode·职场和发展
Frank_refuel17 分钟前
C++STL之set和map的接口使用介绍
数据库·c++·算法
java修仙传17 分钟前
力扣hot100:跳跃游戏||
算法·leetcode·游戏
闻缺陷则喜何志丹18 分钟前
【模拟】P9670 [ICPC 2022 Jinan R] Frozen Scoreboard|普及+
c++·算法·模拟·洛谷
永远都不秃头的程序员(互关)21 分钟前
【K-Means深度探索(十一)】K-Means VS 其他聚类算法:如何选择最合适的工具?
算法·kmeans·聚类
洛生&28 分钟前
Nested Ranges Count
算法
老鼠只爱大米29 分钟前
LeetCode经典算法面试题 #142:环形链表 II(哈希表、快慢指针等多种方法详细解析)
算法·leetcode·链表·快慢指针·floyd算法·环形链表
数智工坊30 分钟前
【操作系统-线程介绍】
linux·算法·ubuntu
小龙报33 分钟前
【C语言进阶数据结构与算法】LeetCode27 && LeetCode88顺序表练习:1.移除元素 2.合并两个有序数组
c语言·开发语言·数据结构·c++·算法·链表·visual studio
炽烈小老头33 分钟前
【每天学习一点算法 2026/01/21】倒二进制位
学习·算法