哔哩哔哩2021校园招聘后端开发方向笔试卷B 第二题 螺旋矩阵
题目:
给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素
输入例子1:
[[1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12] ]
输出例子1:
[1,2,3,4,8,12,11,10,9,5,6,7]
代码:
1 import java.util.*; 2 3 4 public class Solution { 5 /** 6 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 7 * 8 * @param matrix int整型二维数组 9 * @return int整型一维数组 10 */ 11 public int[] SpiralMatrix (int[][] matrix) { 12 // write code here 13 if(matrix==null||matrix.length==0){ 14 return new int[0]; 15 } 16 17 int m=matrix.length; 18 int n=matrix[0].length; 19 ArrayList<Integer> arrayList=new ArrayList<>(); 20 //圈数由m、n中小的决定 21 int t=(Math.min(m,n)+1)/2; 22 for (int i = 0; i < t; i++) { 23 fun(matrix,i,arrayList); 24 } 25 int[] res=new int[arrayList.size()]; 26 for (int i = 0; i < res.length; i++) { 27 res[i]=arrayList.get(i); 28 } 29 return res; 30 31 } 32 33 //实现一个外圈遍历 34 public static void fun(int[][] matrix,int x,ArrayList<Integer> arrayList){ 35 int m=matrix.length; 36 int n=matrix[0].length; 37 //上 行 38 for (int i = x; i < n -x; i++) { 39 arrayList.add(matrix[x][i]); 40 41 } 42 43 //右 列 44 for (int i = x+1; i < m -x; i++) { 45 arrayList.add(matrix[i][n-1-x]); 46 47 } 48 49 //下 行 50 for (int i = n-x-2; i >= x; i--) { 51 //可能会导致matrix[x][x]再遍历一次,所以就将其去除 52 if(i==x&&m -x-1==x){break;} 53 arrayList.add(matrix[m -x-1][i]); 54 55 } 56 57 //左 列 58 for (int i = m-x-2; i > x; i--) { 59 arrayList.add(matrix[i][x]); 60 } 61 } 62 }
· 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应用必不可少的技术