54. 螺旋矩阵
题目:给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
示例 1:
输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] 输出: [1,2,3,6,9,8,7,4,5]
示例 2:
输入: [ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12] ] 输出: [1,2,3,4,8,12,11,10,9,5,6,7]
代码: //另外一种思路是用四个指针l,r,u,d代表左右上下,每圈添加时圈中最外的四个位置,这样更好判断
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
var list=new ArrayList<Integer>();
int m=matrix.length;
int n=matrix[0].length;
int k=(Math.min(n,m)+1)/2; //k代表循环多少圈
int row,col;
for(int i=0;i<k;++i){
row=i;
col=i;
//上面行放入
while(row==i&&col<n-i){
list.add(matrix[row][col]);
++col;
}
--col;
++row;
//右列
while(col==n-1-i&&row<m-i){
list.add(matrix[row][col]);
++row;
}
--row;
--col;
//下行
while(row==m-1-i&&col>=i){
if(row==i){break;} //判断这行是不是再前面走过了 ,因为有时候就剩最后一行或一列,所以最后一行或一列单独判断
list.add(matrix[row][col]);
--col;
}
++col;
--row;
//左列
while(col==i&&row>i){
if(col==n-1-i){break;} //判断这列是不是再前面走过了
list.add(matrix[row][col]);
--row;
}
}
return list;
}
}
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术