LeetCode 热题 100 | 矩阵

目录

1  73. 矩阵置零

2  54. 螺旋矩阵

3  48. 旋转图像

4  240. 搜索二维矩阵 II


菜鸟做题第二周,语言是 C++

1  73. 矩阵置零

解题思路:

  1. 遍历矩阵,寻找等于 0 的元素,记录对应的行和列
  2. 将被记录的行的元素全部置 0
  3. 将被记录的列的元素全部置 0
class Solution {
public:void setZeroes(vector<vector<int>>& matrix) {int n = matrix.size(), m = matrix[0].size();unordered_set<int> row, col;// 寻找0for (int i = 0; i < n; ++i) {for (int j = 0; j < m; ++j) {if (matrix[i][j] == 0) {row.insert(i);col.insert(j);}}}// 行置0for (auto &r:row) {for (int j = 0; j < m; ++j) {matrix[r][j] = 0;}}// 列置0for (auto &c:col) {for (int i = 0; i < n; ++i) {matrix[i][c] = 0;}}}
};

2  54. 螺旋矩阵

解题思路:

  • 定义 right,down,left,up 来标志四个方向
  • 根据不同的方向设置不同的坐标加减策略
  • 将被遍历过的元素置为 101,用于指示能否继续前进
  • 借助 ans.size() 计数,用于指示是否继续循环

为什么将被遍历过的元素置为 101?

如上图所示,101 是矩阵元素绝对不会取到的数值。

如果题目对取值范围没有限制的话,那可能真的需要定义另一个矩阵来记录遍历情况了。

class Solution {
public:vector<int> spiralOrder(vector<vector<int>>& matrix) {int right = 1, down = 0, up = 0, left = 0;vector<int> ans;int n = matrix.size(), m = matrix[0].size();int i = 0, j = 0;while (ans.size() != n * m) {if (right) {while (j < m && matrix[i][j] != 101) {ans.push_back(matrix[i][j]);matrix[i][j] = 101;++j;}--j;++i;right = 0;down = 1;}if (down) {while (i < n && matrix[i][j] != 101) {ans.push_back(matrix[i][j]);matrix[i][j] = 101;++i;}--i;--j;down = 0;left = 1;}if (left) {while (j >= 0 && matrix[i][j] != 101) {ans.push_back(matrix[i][j]);matrix[i][j] = 101;--j;}++j;--i;left = 0;up = 1;}if (up) {while (i >= 0 && matrix[i][j] != 101) {ans.push_back(matrix[i][j]);matrix[i][j] = 101;--i;}++i;++j;up = 0;right = 1;}}return ans;}
};

3  48. 旋转图像

报一丝,还是用了新的矩阵,以后想想其他办法。。。

class Solution {
public:void rotate(vector<vector<int>>& matrix) {auto temp = matrix;int n = matrix.size();for (int i = 0; i < n; ++i) {for (int j = 0; j < n; ++j) {temp[i][j] = matrix[n - 1 - j][i];}}matrix = temp;}
};

4  240. 搜索二维矩阵 II

笨办法,但意外的是没超时

class Solution {
public:bool searchMatrix(vector<vector<int>>& matrix, int target) {int n = matrix.size(), m = matrix[0].size();int i = 0, j = 0;while (i < n && j < m && matrix[i][j] <= target) {if (matrix[i][j] == target) return true;++i;++j;}// 针对n<m且找到头的情况if (i == n) {--i;while (j < m && matrix[i][j] <= target) {if (matrix[i][j] == target) return true;++j;}if (j == m) return false;for (int y = j; y < m; ++y) {for (int x = i; x >= 0; --x) {if (matrix[x][y] == target) return true;}}}// 针对n>m的情况且找到头的情况if (j == m) {--j;while (i < n && matrix[i][j] <= target) {if (matrix[i][j] == target) return true;++i;}if (i == n) return false;for (int x = i; x < n; ++x) {for (int y = j; y >= 0; --y) {if (matrix[x][y] == target) return true;}}}for (int x = i; x < n; ++x) {for (int y = j; y >= 0; --y) {if (matrix[x][y] == target) return true;}}for (int y = j; y < m; ++y) {for (int x = i; x >= 0; --x) {if (matrix[x][y] == target) return true;}}return false;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/438505.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VBA技术资料MF112:列出目录中的所有文件和文件夹

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到…

AI 绘画平台难开发,难变现?试试 Stable Diffusion API Serverless 版解决方案

作者&#xff1a;王佳、江昱、筱姜 Stable Diffusion 模型&#xff0c;已经成为 AI 行业从传统深度学习时代走向 AIGC 时代的标志性里程碑。越来越多的开发者借助 stable-diffusion-webui&#xff08;以下简称 SDWebUI&#xff09;能力进行 AI 绘画领域创业或者业务上新&#…

树莓派实战应用:基于人脸识别系统

引言&#xff1a; 随着人工智能技术的不断发展&#xff0c;人脸识别技术已经广泛应用于各种场景&#xff0c;如门禁系统、安全监控等。树莓派作为一种功能强大的迷你计算机&#xff0c;也可以用于搭建人脸识别检测系统。 一、项目简介 人脸识别系统是一种基于人工智能技术的身…

面向对象编程(高级)(上)

文章目录 一. 关键字&#xff1a;static1.1 类属性、类方法的设计思想1.2 static关键字1.3 静态变量1.3.1 语法格式1.3.2 静态变量的特点1.3.3 举例1.3.4 内存解析 1.4 静态方法1.4.1 语法格式1.4.2 静态方法的特点1.4.3 举例 1.5 练习 二. 单例(Singleton)设计模式2.1 设计模式…

C++入门(基础语法)

文章目录 写在前面1 C关键字2 命名空间2.1 如何定义一个命名空间&#xff1f;2.2 命名空间的使用 3 C的输入&输出函数4 缺省参数4.1 缺省参数的定义4.2 缺省参数的分类4.2.1 全缺省参数4.2.2 半缺省参数4.3 注意事项 5 函数重载6引用6.1引用的概念6.2 引用的特性6.2.1 引用…

源聚达科技:开一家抖音店铺怎么做最好

在数字化浪潮的推动下&#xff0c;抖音不仅是年轻人展示才华的舞台&#xff0c;也成为商家争夺流量的新阵地。开一家抖音店铺&#xff0c;看似简单&#xff0c;实则需要精心策划和周到运营。 首要任务是确立店铺定位。正如古人云“磨刀不误砍柴工”&#xff0c;明确目标受众和主…

使用 Redis 的 List 数据结构实现分页查询的思路

假设有一个存储数据的 List&#xff0c;每个元素代表一个记录&#xff0c;例如 recordsList。 按页存储数据&#xff1a; 每页存储一定数量的记录。例如&#xff0c;第一页存储索引 0 到 N-1 的记录&#xff0c;第二页存储索引 N 到 2N-1 的记录&#xff0c;以此类推。 分页查…

嵌入式基础知识-逻辑覆盖测试用例设计

上篇文章&#xff0c;介绍了软件测试相关的基础概念&#xff0c;其中白盒测试中的逻辑覆盖率知识点比较复杂&#xff0c;本篇通过实例来讲解各种覆盖率的测试用例该如何设计。 1 基础示例 1.1 例题一 有如下程序&#xff0c;设计分别满足语句覆盖和分支覆盖的最有效力的测试…

Vue3使用setup-extend简化组件名写法

如果我们在Vue3中要使用setup的语法糖&#xff0c;就需要使用两个script标签&#xff0c;一个用于设置组件的name属性&#xff0c;一个用于编写setup中的代码。如下&#xff1a; 但是我们有觉得光是因为一个name属性就多写一个script标签有点麻烦了。 因此我们可以使用插件来进…

【VS Code+Verilog+Vivado使用】(2)基本设置

文章目录 2 基本设置2.1 字体大小2.2 Tab大小2.3 选中高亮2.4 文件编码 2 基本设置 2.1 字体大小 方法1&#xff1a;VS Code左下角 > 管理 > 设置&#xff0c;搜索"font size"&#xff0c;点击左侧"字体"&#xff0c;根据需要设置"editor.fon…

2024年【N1叉车司机】考试内容及N1叉车司机复审考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 N1叉车司机考试内容是安全生产模拟考试一点通生成的&#xff0c;N1叉车司机证模拟考试题库是根据N1叉车司机最新版教材汇编出N1叉车司机仿真模拟考试。2024年【N1叉车司机】考试内容及N1叉车司机复审考试 1、【多选题…

扫雷游戏(C语言)

目录 一、前言&#xff1a; 二、游戏规则&#xff1a; 三、游戏前准备 四、游戏实现 1、打印菜单 2、初始化棋盘 3、打印棋盘 4、布置雷 5、排雷 五、完整代码 一、前言&#xff1a; 用C语言完成扫雷游戏对于初学者来说&#xff0c;难度并不是很大&#xff0c;而且通…