概述
[剑指 Offer 29]顺时针打印矩阵
题目
- 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
- 示例
示例 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]
题解
- new一个结果数组,长度为 matrix 元素个数
- 控制边界,将 matrix 元素赋值给 结果数组
- 顺时针打印,控制边界条件如下:
- 从左到右:列在变,横坐标始终为t,本行完成后上边界向下收缩
- 从上到下:行在变,纵坐标始终为r,本列完成后右边界向左收缩
- 从右到左:列在变,横坐标始终为b,本行完成后下边界向上收缩
- 从右到左:行在变,纵坐标始终为l,本行完成后左边界向右收缩
class Solution {
public int[] spiralOrder(int[][] matrix) {
int length = matrix.length * matrix[0].length;
int[] res = new int[length];
int index = 0;
int l = 0, r = matrix[0].length-1, t = 0, b = matrix.length-1;
while (true){
//从左到右,列在变,横坐标始终为t,本行完成后上边界向下收缩
for(int i = l; i <= r; i++) res[index++] = matrix[t][i];
if(++t > b) break;
//从上到下,行在变,纵坐标始终为r,本列完成后右边界向左收缩
for(int i = t; i <= b; i++) res[index++] = matrix[i][r];
if(l > --r) break;
//从右到左,列在变,横坐标始终为b,本行完成后下边界向上收缩
for(int i = r; i >= l; i--) res[index++] = matrix[b][i];
if(t > --b) break;
//从右到左,行在变,纵坐标始终为l,本行完成后左边界向右收缩
for(int i = b; i >= t; i--) res[index++] = matrix[i][l];
if(++l > r) break;
}
return res;
}
}
顺时针打印矩阵顺时针打印矩阵
最后
以上就是仁爱镜子为你收集整理的[剑指 Offer 29]顺时针打印矩阵[剑指 Offer 29]顺时针打印矩阵的全部内容,希望文章能够帮你解决[剑指 Offer 29]顺时针打印矩阵[剑指 Offer 29]顺时针打印矩阵所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复