题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例 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
来源: 力扣(LeetCode)
链接: https://leetcode-cn.com/problems/shun-shi-zhen-da-yin-ju-zhen-lcof
解决方案:
public static int[] spiralOrder(int[][] matrix) {
if(matrix.length == 0) {
return new int[0];
}
// l, r, t, b 分别表示左, 右, 上, 下边界
int l = 0, r = matrix[0].length - 1, t = 0, b = matrix.length - 1, x = 0;
int[] res = new int[(r + 1) * (b + 1)];
while (true) {
// 从左向右打印, i初始赋值为左边界l, 向右边界r滑动
for(int i = l; i <= r; i++) {
res[x++] = matrix[t][i];
}
// 从左向右打印完之后,上边界向下扩1, 比较此时上边界和下边界大小,如果t大于b,则跳出循环
if(++t > b) {
break;
}
// 从上向下打印, i初始赋值为上边界t, 向下边界滑动
for(int i = t; i <= b; i++) {
res[x++] = matrix[i][r];
}
// 从上向下打印完之后, 右边界向左缩1, 比较此时左边界和右边界大小,如果l大于r,则跳出循环
if(l > --r) {
break;
}
// 从右向左打印, i初始赋值为右边界r, 向左边界滑动
for(int i = r; i >= l; i--) {
res[x++] = matrix[b][i];
}
// 从右向左打印完之后, 下边界向上缩1, 比较此时上边界和下边界大小, 如果t大于b,则跳出循环
if(t > --b) {
break;
}
// 从下向上打印, i初始赋值为下边界b, 向上滑动
for(int i = b; i >= t; i--) {
res[x++] = matrix[i][l];
}
// 从下向上打印完之后, 左边界向右扩1, 比较此时左边界和右边界大小, 如果l大于r,则跳出循环
if(++l > r) {
break;
}
}
return res;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/5228.html