码迷,mamicode.com
首页 > 编程语言 > 详细

LeetCode--054--区螺旋矩阵(java)

时间:2019-05-13 15:58:46      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:子矩阵   --   solution   完成后   else   etc   col   完成   color   

给定一个包含 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]

思路:把每次打印看成是打印当前矩阵的外圈,当前矩阵打印完成后,找到其子矩阵,继续打印子矩阵的外圈。
比如例子1的矩阵 1 2 3
4 6
7 8 9
如何确定一个矩阵,只需要确定其左上角的点和右下角的点,我们把左上角的点即为(tR,tC) 把右下角的点记为(dR,dC)
(0,0) (2,2)即为上面矩阵的两个点,打印一圈后,左上角的点往右下移动一个位置,右下角的点往左上移动一个位置,停止条件为,左上角的点跑到右下角点的右边或者下边。
 1 class Solution {
 2     public List<Integer> spiralOrder(int[][] matrix) {
 3         List<Integer> list = new ArrayList<>();
 4         if(matrix.length == 0 || matrix == null)return list;
 5         int tR = 0;
 6         int tC = 0;
 7         int dR = matrix.length - 1;
 8         int dC = matrix[0].length - 1;
 9         while (tR <= dR && tC <= dC){
10             printEdge(matrix,tR++,tC++,dR--,dC--,list);
11         }
12         return list;
13     }
14     public static void printEdge(int[][] m,int tR,int tC,int dR,int dC,List<Integer> list){
15         if(tR == dR){
16             for(int i = tC;i <= dC;i++){
17                 list.add(m[tR][i]);
18             }
19         }else if (tC == dC){
20             for(int i = tR;i <= dR;i++){
21                 list.add(m[i][tC]);
22             }
23         }else{
24             int curC = tC;
25             int curR = tR;
26             while(curC != dC){
27                 list.add(m[tR][curC]);
28                 curC++;
29             }
30             while (curR != dR){
31                 list.add(m[curR][dC]);
32                 curR++;
33             }
34             while(curC != tC){
35                 list.add(m[dR][curC]);
36                 curC--;
37             }
38             while(curR != tR){
39                 list.add(m[curR][tC]);
40                 curR--;
41             }
42         }
43     }
44 }

 参考:程序员代码面试指南

2019-05-13 15:47:27

LeetCode--054--区螺旋矩阵(java)

标签:子矩阵   --   solution   完成后   else   etc   col   完成   color   

原文地址:https://www.cnblogs.com/NPC-assange/p/10857053.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!