力扣54(java)-螺旋矩阵(中等)
题目:
给你一个 m
行 n
列的矩阵 matrix
,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
示例 1:
提示:
m == matrix.length
n == matrix[i].length
1 <= m, n <= 10
-100 <= matrix[i][j] <= 100
通过次数251,880提交次数517,676
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/spiral-matrix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
借助四个顶点(left、right、upper、bottom)对未访问的区域进行限制,循环退出的条件就是res.size()== m *n
代码:
1 class Solution { 2 public List<Integer> spiralOrder(int[][] matrix) { 3 List<Integer> res = new ArrayList<Integer>(); 4 int m = matrix.length,n = matrix[0].length; 5 int left = 0, right = n -1, upper = 0, bottom = m -1; 6 while(res.size() < m*n){ 7 //从左往右遍历 8 if(upper <= bottom){ 9 for(int col = left; col <= right; col++){ 10 res.add(matrix[upper][col]); 11 } 12 upper++; 13 } 14 //从上往下遍历 15 if(left <= right){ 16 for(int row = upper; row <= bottom; row++){ 17 res.add(matrix[row][right]); 18 } 19 right--; 20 } 21 //从右往左遍历 22 if(upper <= bottom){ 23 for(int col = right; col >= left; col--){ 24 res.add(matrix[bottom][col]); 25 } 26 bottom--; 27 } 28 //从下往上 29 if(left <= right){ 30 for(int row = bottom; row >= upper; row--){ 31 res.add(matrix[row][left]); 32 } 33 left++; 34 } 35 } 36 return res; 37 } 38 }
小知识:
1.计算字符串的长度
int len= str.length();
2.计算数组的长度
int length = nums.length;
3.size()是针对泛型集合List,相比于数组,数组是静态的在初始化的时候JVM就会为其分配相应的内存大小,但是List是动态的,其没有length属性,所以java专门为其提供了size()方法来计算集合的长度大小。
List<Integer> res = new ArrayList<Integer>(); int n = res.size();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了