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

Leetcode 54. 螺旋矩阵(二维数组移动坐标)

54. 螺旋矩阵

使用vis数组记录该位置是否已经被访问
定义一个int型dir来记录方向,0123分别代表右下左上
当越界或碰壁已访问的位置后,修改dir并计算下一个位置
否则根据原dir计算下一个位置

class Solution {public List<Integer> spiralOrder(int[][] matrix) {List<Integer> list = new ArrayList<>();int n = matrix.length;int m = matrix[0].length;int dir = 0; // 0右  1下  2左  3上boolean vis[][] = new boolean[n][m];int x = 0;int y = 0;for(int i = 0; i < n*m; i ++){list.add(matrix[x][y]);vis[x][y] = true;if(dir == 0){if(y + 1 >= m || vis[x][y+1] == true){dir = (dir + 1) % 4;x = x + 1;}else{y = y + 1;}}else if(dir == 1){if(x + 1 >= n || vis[x+1][y] == true){dir = (dir + 1) % 4;y = y - 1;}else{x = x + 1;}}else if(dir == 2){if(y - 1 < 0 || vis[x][y-1] == true){dir = (dir + 1) % 4;x = x - 1;}else{y = y - 1;}}else{if(x - 1 < 0 || vis[x-1][y] == true){dir = (dir + 1) % 4;y = y + 1;}else{x = x - 1;}}}return list;}
}

简化

常用思路,使用二维数组dirs[4][2]进行坐标的上下左右四个方位移动,简化代码
(也常用dirs[8][2]获取坐标的周围8个位置)
使用dirs和dir计算下一个将要使用的新坐标,若越界或碰壁,则将dir修改,获得正确的新坐标

class Solution {public List<Integer> spiralOrder(int[][] matrix) {List<Integer> list = new ArrayList<>();int n = matrix.length;int m = matrix[0].length;int dir = 0; // 0右  1下  2左  3上int dirs[][] = {{0,1},{1,0},{0,-1},{-1,0}}; // 对应dir四种移动坐标变化boolean vis[][] = new boolean[n][m];int x = 0;int y = 0;for(int i = 0; i < n*m; i ++){list.add(matrix[x][y]);vis[x][y] = true;// 判断int newX = x + dirs[dir][0];int newY = y + dirs[dir][1];if(newX < 0 || newX >= n || newY < 0 || newY >= m || vis[newX][newY] == true){dir = (dir + 1) % 4;}// 移动x += dirs[dir][0];y += dirs[dir][1];}return list;}
}
http://www.lryc.cn/news/367042.html

相关文章:

  • 深度图的方法实现加雾,Synscapes数据集以及D455相机拍摄为例
  • QT: 读写ini配置文件(实现qml界面登录,修改)
  • DevOps 安全集成:从开发到部署,全生命周期安全守护
  • R语言数据分析15-xgboost模型预测
  • 重构大学数学基础_week04_从点积理解傅里叶变换
  • Shell以及Shell编程
  • 从记忆到想象:探索AI的智能未来
  • “安全生产月”专题报道:AI智能监控技术如何助力安全生产
  • 【转】ES, 广告索引
  • Unity学习要点
  • 简单使用phpqrcode 生成二维码图片
  • 软考架构-计算机网络考点
  • 渗透测试之内核安全系列课程:Rootkit技术初探(三)
  • 大模型日报2024-06-08
  • leetcode 1631.最小体力消耗路径
  • 【ARM64 常见汇编指令学习 19.2 -- ARM64 地址加载指令 ADR 详细介绍】
  • vscode输出控制台中文显示乱码最有效解决办法
  • springboot + Vue前后端项目(第十五记)
  • 如何在Windows 11中恢复丢失的快速访问菜单?这里提供解决办法
  • 变声器软件免费版有哪些?国内外12大热门变声器大盘点!(新)
  • 计算机网络 —— 数据链路层(无线局域网)
  • SpringBoot图书管理系统【附:资料➕文档】
  • shell简介
  • 使用 Scapy 库编写 ICMP 不可达攻击脚本
  • Electron qt开发教程
  • 尝试用 GPT-4o 写 2024高考语文作文
  • 自动化Reddit图片收集:Python爬虫技巧
  • 自动驾驶人工智能
  • 基础乐理入门
  • mysql 8 linux7,8安装教程