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

力扣labuladong一刷day19天花式遍历

力扣labuladong一刷day19天花式遍历

文章目录

      • 力扣labuladong一刷day19天花式遍历
      • 一、48. 旋转图像
      • 二、54. 螺旋矩阵
      • 三、59. 螺旋矩阵 II

一、48. 旋转图像

题目链接:https://leetcode.cn/problems/rotate-image/
思路:把矩阵向右旋转90度,要求原地操作,这里借鉴了把一个字符串里所有单词顺序给翻转的思路,单词顺序翻转其实是,先翻转整个字符串,然后再翻转每一个单词即可完成,而不是按照空格把每一个单词分隔开再拼回去。
把矩阵沿着左上角和右下角这条对对角线翻转,然后再每一行横向翻转即可得到顺时针旋转90度。

class Solution {public void rotate(int[][] matrix) {int n = matrix.length;for (int i = 0; i < n; i++) {for (int j = i; j < n; j++) {int temp = matrix[i][j];matrix[i][j] = matrix[j][i];matrix[j][i] = temp;}}for (int[] nums : matrix) {int i = 0, j = nums.length-1;while (i < j) {int temp = nums[i];nums[i] = nums[j];nums[j] = temp;i++;j--;}}}
}

二、54. 螺旋矩阵

题目链接:https://leetcode.cn/problems/spiral-matrix/
思路:每次读取一条边,然后每遍历一条边就调整边界。

class Solution {List<Integer> spiralOrder(int[][] matrix) {int m = matrix.length, n = matrix[0].length;int upper_bound = 0, lower_bound = m - 1;int left_bound = 0, right_bound = n - 1;List<Integer> res = new LinkedList<>();// res.size() == m * n 则遍历完整个数组while (res.size() < m * n) {if (upper_bound <= lower_bound) {// 在顶部从左向右遍历for (int j = left_bound; j <= right_bound; j++) {res.add(matrix[upper_bound][j]);}// 上边界下移upper_bound++;}if (left_bound <= right_bound) {// 在右侧从上向下遍历for (int i = upper_bound; i <= lower_bound; i++) {res.add(matrix[i][right_bound]);}// 右边界左移right_bound--;}if (upper_bound <= lower_bound) {// 在底部从右向左遍历for (int j = right_bound; j >= left_bound; j--) {res.add(matrix[lower_bound][j]);}// 下边界上移lower_bound--;}if (left_bound <= right_bound) {// 在左侧从下向上遍历for (int i = lower_bound; i >= upper_bound; i--) {res.add(matrix[i][left_bound]);}// 左边界右移left_bound++;}}return res;}
}

三、59. 螺旋矩阵 II

题目链接:https://leetcode.cn/problems/spiral-matrix-ii/
思路:正方形的螺旋矩阵可以按照四条边遍历,每次只遍历左闭右开,正好每次遍历一个圈。

class Solution {public int[][] generateMatrix(int n) {int[][] matrix = new int[n][n];int k = 1;for (int i = 0; i < n / 2; i++) {for (int j = i; j < n-i-1; j++) {matrix[i][j] = k++;}for (int j = i; j < n-i-1; j++) {matrix[j][n-i-1] = k++;}for (int j = n-i-1; j > i; j--) {matrix[n-i-1][j] = k++;}for (int j = n-i-1; j > i; j--) {matrix[j][i] = k++;}}if (n % 2 == 0) return matrix;matrix[n/2][n/2] = k;return matrix;}
}
http://www.lryc.cn/news/247394.html

相关文章:

  • 自动化部署 扩容openGauss —— Ansible for openGauss
  • C#多线程创建及线程的同步
  • MOM系统功能清单
  • ARM Cortex-M核的内核态,用户态
  • flex布局实战之自动填充剩余
  • 【LeetCode】203. 移除链表元素
  • IDEA2023版本创建Sping项目只能勾选17和21,却无法使用Java8?(已解决)
  • Vue生命周期详解
  • 政务大数据与资源平台建设解决方案:PPT全文75页,附下载
  • 环境监测传感器守护我们的地球
  • PHP 循环控制 学习资料
  • Unity 关于生命周期函数的一些认识
  • 大数据学习(26)-spark核心总结
  • EC 404 information economics
  • 基于单片机的烟雾检测报警装置(论文+源码)
  • C语言面试之旅:掌握基础,探索深度(面试实战之c语言关键词中篇)
  • 项目监控:项目跟踪和控制的工具和步骤
  • GOAT:多模态、终身学习、平台无关的机器人通用导航系统
  • [webpack] webpack 插件大全
  • UE4/UE5 雾
  • Linux处理文件常见命令
  • sed应用
  • Linux配置SFTP用户的详细过程
  • 前端---JavaScript篇
  • 使用vue-admin-template时,需要注意的问题,包括一定要去除mock.js注释
  • 力扣hot100 最大子数组和 动态规划 分治 无后效性 子问题划分
  • C语言--每日选择题--Day28
  • Linux 安装 Minio 配置 HTTPS
  • xcode opencv
  • Spark---资源、任务调度