顺时针打印矩阵
个人博客
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5]
题解
-
内缩边界
-
复杂度分析
- 时间复杂度O(n)
- 空间复杂度O(1):四个边界条件(额外空间),返回的数组为必须使用的空间
-
顺时针打印矩阵:从左到右,从上到下,从右到左,从下到上,每打印就把边界内缩,知道
class Solution { public int[] spiralOrder(int[][] matrix) { if(matrix.length == 0)return new int[0]; int i = 0,left = 0,right = matrix[0].length - 1,top = 0,bottom = matrix.length - 1; int[] res = new int[matrix[0].length * matrix.length]; while(true){ for(int j = left;j <= right;j++)res[i++] = matrix[top][j]; if(++top > bottom)break; for(int j = top;j <= bottom;j++)res[i++] = matrix[j][right]; if(--right < left)break; for(int j = right;j >= left;j--)res[i++] = matrix[bottom][j]; if(--bottom < top)break; for(int j = bottom;j >= top;j--)res[i++] = matrix[j][left]; if(++left > right)break; } return res; } }
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v2QUSydi-1596525337351)(https://cdn.jsdelivr.net/gh/Lanternliu/pic@master/uPic/5ElZUw.png)]
-
总结
- 偷窥了大佬的代码,边界条件设置真的巧妙!
- 剑指 offer 里面的解释比较难。