剑指 Offer 29. 顺时针打印矩阵

导读:本篇文章讲解 剑指 Offer 29. 顺时针打印矩阵,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例 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

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!