剑指Offer对答如流系列 - 顺时针打印矩阵
Posted jefferychenxiao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指Offer对答如流系列 - 顺时针打印矩阵相关的知识,希望对你有一定的参考价值。
面试题29:顺时针打印矩阵
题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
比如:输入以下矩阵
打印出的数字为1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10
问题分析
每次打印都是打印外面的一圈,每次打印矩阵的起点横纵坐标都相同(横纵坐标值均设置为start),其余三个角的坐标都与start有关。
对于start而言,start*2的值小于行数和列数时才需要继续打印。
这样一分析,发现整个数学模型都建立起来了。
问题解答
public void printMatrix(int[][] matrix) {
if(matrix==null || matrix.length<=0) {
return;
}
printMatrixInCircle(matrix, 0);
}
private void printMatrixInCircle(int[][] matrix,int start) {
int row=matrix.length;
int col=matrix[0].length;
int endX=col-1-start;
int endY=row-1-start;
if(endX<start || endY<start) {
return;
}
//仅一行
if(endY==start) {
for(int i=start;i<=endX;i++) {
System.out.print(matrix[start][i]+" ");
}
return; //记得结束
}
//仅一列
if(endX==start) {
for(int i=start;i<=endY;i++) {
System.out.print(matrix[i][start]+" ");
}
return; //记得结束
}
//打印边界
for(int i=start;i<=endX;i++) {
System.out.print(matrix[start][i]+" ");
}
for(int i=start+1;i<=endY;i++) {
System.out.print(matrix[i][endX]+" ");
}
for(int i=endX-1;i>=start;i--) {
System.out.print(matrix[endY][i]+" ");
}
for(int i=endY-1;i>=start+1;i--) {
System.out.print(matrix[i][start]+" ");
}
//继续打印更内部的矩阵,令start+1
printMatrixInCircle(matrix, start+1);
}
以上是关于剑指Offer对答如流系列 - 顺时针打印矩阵的主要内容,如果未能解决你的问题,请参考以下文章