您的位置:首页 > Web前端

[遇见时光]剑指offer-顺时针打印矩阵java

2016-07-29 18:01 495 查看

题目描述:

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵:1 2 3 45 6 7 89 10 11 1213 14 15 16则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.输入:
输入可能包含多个测试样例,对于每个测试案例,输入的第一行包括两个整数m和n(1<=m,n<=1000):表示矩阵的维数为m行n列。接下来的m行,每行包括n个整数,表示矩阵的元素,其中每个元素a的取值范围为(1<=a<=10000)。输出:
对应每个测试案例,输出一行,按照从外向里以顺时针的顺序依次打印出每一个数字,每个数字后面都有一个空格。样例输入:
4 4
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代码实现
public class circleOutput {
public static void printMatrixIncircle(int[][] nArr, int rows, int columns,
int nStart) {
// nEndX是最右一列列号
int nEndX = columns - 1 - nStart;
// nEndY是最下面一行行号
int nEndY = rows - 1 - nStart;

// 从左至右打印一行
System.out.println();
System.out.println("从左至右打印一行");
for (int i = nStart; i <= nEndX; i++) {

System.out.print(nArr[nStart][i] + "\t");
}

// 从上到下打印一列

if (nEndY > nStart) {
System.out.println();
System.out.println("从上到下打印一列");
for (int j = nStart + 1; j <= nEndY; j++) {

System.out.print(nArr[j][nEndX] + "\t");
}
}
// 从右至左打印一行

if (nEndX > nStart && nEndY > nStart) {
System.out.println();
System.out.println("从右至左打印一行");
for (int k = nEndX - 1; k >= nStart; k--) {
System.out.print(nArr[nEndY][k] + "\t");
}
}
// 从下到上打印一列

if (nEndY - 1 > nStart && nEndX > nStart) {
System.out.println();
System.out.println("从下到上打印一列");
for (int p = nEndY - 1; p >= nStart + 1; p--) {
System.out.print(nArr[p][nStart] + "\t");
}
}

}

public static void print(int[][] nArr, int rows, int columns) {
if (nArr == null || rows <= 0 || columns <= 0) {
return;
}
int nStart = 0;
while (rows > (nStart * 2) && columns > (nStart * 2)) {
printMatrixIncircle(nArr, rows, columns, nStart);
nStart++;
}
}

public static void main(String[] args) {
// TODO Auto-generated method stub
int[][] nMatrix1 = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 },
{ 13, 14, 15, 16 } };
print(nMatrix1, 4, 4);
/*
int[][] nMatrix2 = {{1,2,3,4}};
circleOutput.print(nMatrix2, 1, 4);

int[][] nMatrix3 ={{1,2,3,4,5},{6,7,8,9,10}};
circleOutput.print(nMatrix3, 2, 5);

int[][] nMatrix4 = {{1},{2},{3},{4}};
circleOutput.print(nMatrix4, 4, 1);
      */
}
}
输出结果:
从左至右打印一行
1    2    3    4
从上到下打印一列
8    12    16
从右至左打印一行
15    14    13
从下到上打印一列
9    5
从左至右打印一行
6    7
从上到下打印一列
11
从右至左打印一行
10

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: