当前位置: 首页 > news >正文

【LeetCode 热题 100】矩阵 专题(大多原地算法,需要一定思维)

解题思路 在 代码注释中!

文章目录

    • 73. 矩阵置零
    • 54. 螺旋矩阵
    • 48. 旋转图像
    • 240. 搜索二维矩阵 II

73. 矩阵置零

class Solution {
public:void setZeroes(vector<vector<int>>& matrix) {// 难点:原地算法// 直接复用 matrix 第一行 和 第一列,但是会 覆盖, 所以  单独两个变量 记录 第一行,第一列// 单独两个变量 记录 第一行,第一列int r0 = 1, c0 = 1;int n = matrix.size(), m = matrix[0].size();for(int j = 0;j < m;j ++ ) {if(matrix[0][j] == 0) r0 = 0;}for(int i = 0;i < n;i ++ ){if(matrix[i][0] == 0) c0 = 0;}for(int i = 1;i < n;i ++ ){for(int j = 0; j < m;j ++ ){if(matrix[i][j] == 0) matrix[0][j] = matrix[i][0] = 0;}}// 置0for(int j = 1; j < m;j ++ ){if(matrix[0][j] == 0){for(int i = 0;i < n;i ++ ) matrix[i][j] = 0;}}for(int i = 1;i < n;i ++ ){if(matrix[i][0] == 0){for(int j = 0;j < m;j ++ ) matrix[i][j] = 0;}}// 单独的行列if(!r0)for(int j = 0;j < m;j ++ ) matrix[0][j] = 0;if(!c0)for(int i = 0;i < n;i ++ ) matrix[i][0] = 0;}
};

54. 螺旋矩阵

class Solution {
public:vector<int> spiralOrder(vector<vector<int>>& matrix) {// 方向矢量 模拟int n = matrix.size(), m = matrix[0].size();int k = 0;int dx[4] = {-1,0,1,0}, dy[] = {0,1,0,-1};bool st[n][m];memset(st, 0, sizeof st);vector<int> res;int x = 0, y = 0, d = 1;int a, b;while(k < n * m){res.push_back(matrix[x][y]);st[x][y] = true;int a = x + dx[d], b = y + dy[d];if(a < 0 || a >= n || b < 0 || b >= m || st[a][b]) {d = (d + 1) % 4;a = x + dx[d], b = y + dy[d];}x = a, y = b;k ++ ;}return res;}
};

48. 旋转图像

class Solution {
public:void rotate(vector<vector<int>>& matrix) {// 原地算法// 先 对角线翻转(=顺时针180), 然后 左右翻转(=逆时针90) = 顺时针旋转 90 度int n = matrix.size(), m = matrix[0].size();// 对角线 翻转for(int i = 0;i < n;i ++ ){for(int j = 0;j < i;j ++ ){swap(matrix[i][j], matrix[j][i]);}}// 左右翻转for(int i = 0; i < n;i ++ ){for(int j = 0, k = m - 1; j < k;j ++ , k -- ) swap(matrix[i][j], matrix[i][k]);}}
};

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 = m - 1;while(i < n && j >= 0){if(target > matrix[i][j]) i ++ ;else if(target < matrix[i][j]) j -- ;else if(target == matrix[i][j]) return true;}return false;}
};
http://www.lryc.cn/news/105357.html

相关文章:

  • Java 中为什么要把一个数模(10^9+7)
  • RPC与REST有什么区别?
  • 时间复杂度介绍及其计算
  • etcd实现大规模服务治理应用实战
  • 目标检测中 anchor base和anchor free
  • TypeC拓展设计方案|TypeC转HDMI设计方案|CS5261/CS5265芯片设计参数对比
  • SQL Developer中的Active Data Guard
  • 谈谈FFT到底有何用
  • MATLAB | 如何绘制这样的描边散点图?
  • 偶数科技与白鲸开源完成兼容性认证
  • 【机器学习】Feature scaling and Learning Rate (Multi-variable)
  • windows编译ncnn
  • C++和Lua交互总结
  • nvm安装和切换node版本
  • 每日一题8.2 2536
  • 适配器模式(Adapter)
  • Spring学习笔记——1
  • leetcode 406. 根据身高重建队列
  • Matlab实现AGNES算法
  • STM32F4_外部SRAM
  • Java的代理模式
  • FilterAttributeOnClassMethod
  • springboot + (mysql/pgsql) + jpa 多数据源(不同类数据源)
  • 【Golang】Golang进阶系列教程--Go 语言 context 都能做什么?
  • 画图干货!14种uml图类型及示例
  • 计算机视觉实验:人脸识别系统设计
  • 振弦采集仪完整链条的岩土工程隧道安全监测
  • NLP实战9:Transformer实战-单词预测
  • 使用Vue.js和Rust构建高性能的物联网应用
  • idea调节文字大小、日志颜色、git改动信息