[遇见时光]剑指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
相关文章推荐
- 【剑指offer-Java版】20顺时针打印矩阵
- 【剑指offer——JAVA实现】顺时针打印矩阵(含思路解答示意图)
- 剑指Offer(Java版):顺时针打印矩阵
- 剑指offer:顺时针打印矩阵(java)
- 剑指Offer面试题20(Java版):顺时针打印矩阵
- 剑指offer--面试题20:顺时针打印矩阵--Java实现
- 剑指Offer面试题20:顺时针打印矩阵 Java实现
- Java 剑指offer_面试题20_顺时针打印矩阵(思路在一步步分解之中)
- 【剑指offer】题目20 顺时针打印矩阵
- 【剑指offer】顺时针打印矩阵
- 剑指offer 面试题20—顺时针打印矩阵
- 【剑指offer】顺时针打印矩阵
- 【剑指offer】4.2画图让抽象问题形象化——面试题20:顺时针打印矩阵
- 剑指offer:顺时针打印矩阵
- 剑指offer_面试题20_顺时针打印矩阵(思路在一步步分解之中)
- 【剑指Offer面试编程题】题目1391:顺时针打印矩阵--九度OJ
- 剑指Offer之 - 顺时针打印矩阵
- 剑指offer 面试题20 顺时针打印矩阵
- 【剑指offer】之顺时针打印矩阵
- 剑指offer面试题20-顺时针打印矩阵