剑指offer-面试题20-顺时针打印矩阵
2017-04-14 17:19
525 查看
package case20_PrintMatrixClockWisely; public class PrintMatrixClockWisely { /** * 题目:输入一个矩阵,按照从外向里以顺时针的顺序打印出每一个数字。 * 思路: * 循环打印: * 1:先打印一行(第1行肯定会打印) * 2:再打印当前矩阵的最后一列 * 3:再倒序打印当前矩阵的最后一行 * 4:再倒序打印当前矩阵的第一列 * 起始坐标的规律: * (0,0),(1,1),(2,2)...(startX,startY),起始坐标的两个坐标值相等。 * 并且 startX<= (rows-1)/2,startY<=(columns-1)/2 * 当前矩阵,第1行 坐标 (start,columns-1-start) => (start,endX) * 当前矩阵,最后1列 坐标 (start+1,rows-1-start) => (start+1,endY) * 当前矩阵,最后1行 坐标 (start,columns-1-start+1) => (start,endX-1) * 当前矩阵,第1行 坐标 (start+1,columns-1+1) => (start+1,endY-1) * @author WangSai */ public static void main(String[] args) { // TODO Auto-generated method stub // 初始化矩阵 arr[][] int[][] arr = new int[5][6]; for (int i = 0; i < arr.length; i++) { int tmp = i * 2; for (int j = 0; j < arr[0].length; j++) { arr[i][j] = i * 6 + j; System.out.print(arr[i][j] + " " + '\t'); } System.out.println(); } System.out.println("顺时针打印矩阵:"); // 顺时针打印矩阵 arr[][] printMatrixWisely(arr); } // 循环打印 public static void printMatrixWisely(int[][] arr) { if (arr == null || arr.length < 1 || arr[0].length < 1) return; int start = 0; int rows = arr.length; int columns = arr[0].length; while (2 * start < columns && 2 * start < rows) { printMatrix(arr, rows, columns, start); start++; } } // 打印一圈 public static void printMatrix(int[][] arr, int rows, int columns, int start) { int endX = columns - 1 - start; // 最后一列的列号 int endY = rows - 1 - start; // 最后一行的行号 // 打印该圈第一行 for (int i = start; i <= endX; i++) System.out.print(arr[start][i] + " "); // 打印该圈最后一列 (至少是两行) if (start < endY) for (int i = start + 1; i <= endY; i++) System.out.print(arr[i][endX] + " "); // 打印该圈最后一行 (至少是两行两列) if ((start < endX) && (start < endY)) for (int i = endX - 1; i >= start; i--) System.out.print(arr[endY][i] + " "); // 打印该圈的第一列 (至少是三行两列) if ((start < endX) && (start < endY - 1)) for (int i = endY - 1; i >= start + 1; i--) System.out.print(arr[i][start] + " "); } }
相关文章推荐
- 【剑指offer】面试题20:顺时针打印矩阵
- 剑指offer之面试题20:顺时针打印矩阵
- 剑指Offer之面试题20:顺时针打印矩阵
- 剑指offer面试题20 顺时针打印矩阵
- 剑指offer-面试题 20:顺时针打印矩阵
- 剑指offer——面试题20:顺时针打印矩阵
- 剑指offer——面试题20:顺时针打印矩阵
- 【剑指offer】4.2画图让抽象问题形象化——面试题20:顺时针打印矩阵
- 【面试题】剑指offer20--顺时针打印一个矩阵的数字
- 剑指Offer面试题20:顺时针打印矩阵 Java实现
- 剑指offer面试题20-顺时针打印矩阵
- Java 剑指offer_面试题20_顺时针打印矩阵(思路在一步步分解之中)
- [剑指offer]面试题20:顺时针打印矩阵
- 剑指Offer面试题20(Java版):顺时针打印矩阵
- 剑指offer-4-面试题20:顺时针打印矩阵(画图使抽象问题形象化)
- 剑指offer面试题20:顺时针打印矩阵
- 剑指offer-面试题20:顺时针打印矩阵
- 剑指offer 面试题20—顺时针打印矩阵
- 剑指offer--面试题20:顺时针打印矩阵--Java实现
- 剑指offer-面试题20 顺时针打印矩阵