您的位置:首页 > Web前端

【剑指offer】之顺时针打印矩阵

2015-12-21 11:39 190 查看

题目描述:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵:
1 2 3 4

5 6 7 8

9 10 11 12

13 14 15 16

则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.

分析:

先求出打印一圈的函数,在把矩阵分成若干个圈来打印。

java代码实现:

//矩阵按顺时针打印
private static void printbyCircle(int[][] obs) {
int row = obs.length;
int columns = 0 ;
if(row > 0)
columns = obs[0].length;
if(row<0 || columns<0)
return ;
int start = 0;
while(row>start*2 && columns>start*2) {
printbycircle(obs,columns,row,start) ;
start++;
}
}

//打印一圈
private static void printbycircle(int[][] obs, int columns, int row,int start) {
int endY = columns - 1 - start;
int endX = row - 1 - start ;

//从左到右打印一行
for(int i=start;i<=endX;i++) {
System.out.print(" " + obs[start][i]);
}

//从上到下打印一列
for(int i=start+1;i<=endY;i++) {
System.out.print(" " + obs[i][endX]);
}

//从右到左打印一行
for(int i=endX-1;i>=start;i--) {
System.out.print(" " + obs[endY][i]);
}

//从下往上打印一列
for(int i=endY-1;i>=start+1;i--) {
System.out.print(" " + obs[i][start]);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: