【题目】
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5]
示例 2:
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]] 输出:[1,2,3,4,8,12,11,10,9,5,6,7]
限制:
0 <= matrix.length <= 100
0 <= matrix[i].length <= 100
【思路】
从左到右 上边界--
从上到下 右边界--
从右到左 下边界--
从下到上 左边界--
如果上下左右边界越过了对方,就说明已经结束
【代码】
class Solution { public int[] spiralOrder(int[][] matrix) { if(matrix.length==0) return new int[0]; int l = 0; //左边界 int r = matrix[0].length-1; //右边界 int t = 0; //上边界 int b = matrix.length-1; //下边界 List<Integer> res = new ArrayList<>(); while(true){ // 从top的左到右 for(int i=l;i<=r;i++){ res.add(matrix[t][i]); } // 最顶一行遍历完 top要+1表示进入下一层,如果top比bottom大 说明结束了 if(++t>b) break; for(int i=t;i<=b;i++) res.add(matrix[i][r]); if(--r<l) break; for(int i=r;i>=l;i--){ res.add(matrix[b][i]); } if(--b<t) break; for(int i=b;i>=t;i--){ res.add(matrix[i][l]); } if(++l>r) break; } return res.stream().mapToInt(Integer::intValue).toArray(); } }
标签:顺时针,matrix,Offer,int,res,29,--,length,边界 From: https://www.cnblogs.com/End1ess/p/17325434.html