LeetCode:螺旋矩阵【54】
LeetCode:螺旋矩阵【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]
题目分析
这道题简直丧心病狂☺!我们采用的方式是一圈一圈打印!
答案将是从第一个外层按顺时针顺序排列的所有元素,然后是第二个外层的元素,依此类推。
我们首先定义四个元素,r1,r2,c1,c2,这将框定一个范围,我们顺时针打印这个范围边上的值,每次打印以后再次缩小框。
好的问题来了?
1.要打印几个框?
times=Math.min(长,宽)%2==0?Math.min(长,宽)/2:Math.min(长,宽)/2+1;
2.顺时针打印的横纵坐标变化规律?如图所示有颜色是要打印的框
3、吐槽一下这个题,简直恶心。
Java题解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | class Solution { public List<Integer> spiralOrder( int [][] matrix) { List<Integer> ans = new ArrayList<>(); int m = matrix.length; //行 if (m == 0 ) return ans; int n = matrix[ 0 ].length; //列 int c1 = 0 ; int c2 = n- 1 ; int r1 = 0 ; int r2 = m- 1 ; int times = Math.min(m,n)% 2 == 0 ?Math.min(m,n)/ 2 :Math.min(m,n)/ 2 + 1 ; for ( int i= 0 ;i<times;i++) { for ( int c = c1; c <= c2; c++) ans.add(matrix[r1][c]); for ( int r = r1 + 1 ; r <= r2; r++) ans.add(matrix[r][c2]); if (r1 < r2 && c1 < c2) { for ( int c = c2 - 1 ; c > c1; c--) ans.add(matrix[r2][c]); for ( int r = r2; r > r1; r--) ans.add(matrix[r][c1]); } r1++; r2--; c1++; c2--; } return ans; } } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步