剑指 Offer.29-顺时针打印矩阵
剑指 Offer.29-顺时针打印矩阵
题目链接
剑指 Offer 29. 顺时针打印矩阵
问题描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
个人想法(模拟)
又又又没写出来
官方解法(约瑟夫环问题)
按照顺时针的顺序,使用上下左右四个边界控制遍历,每遍历完一个行或者列,则将对应的边界向内收缩,当出现边界相等的情况时结束遍历
代码
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 30 31 32 33 34 35 36 37 38
| class Solution { public int[] spiralOrder(int[][] matrix) { if(matrix == null || matrix.length == 0) return new int[0]; int top = 0; int left = 0; int right = matrix[0].length-1; int bottom = matrix.length-1; int x = 0; int[] res = new int[(right+1)*(bottom+1)]; while(true){ for(int i=left;i<=right;i++){ res[x++] = matrix[top][i]; } if(++top > bottom) break;
for(int i=top;i<=bottom;i++){ res[x++] = matrix[i][right]; } if(--right < left) break;
for(int i=right;i>=left;i--){ res[x++] = matrix[bottom][i]; } if(--bottom < top) break;
for(int i=bottom;i>=top;i--){ res[x++] = matrix[i][left]; } if(++left > right) break; } return res; } }
|