【剑指offer-Java版】20顺时针打印矩阵

来源:互联网 发布:速达3000进销存软件 编辑:程序博客网 时间:2024/06/11 21:27

顺时针打印矩阵:重在理解,毕竟作者分析的那个方法看起来还是蛮复杂的-所以自己写了个接地气的方法

重在逻辑的一个题,一次性完全写对还是比较困难的

    public class _Q20 {    public void PrintMatrixClockwisely(int matrix[][]){        if(matrix == null) return;        int start = 0;        int col = matrix[0].length;        if(col <= 0) return;        int row = matrix.length;        if(row <= 0) return;        while(col > (start<<1) && row > (start<<1)){            PrintMatrixInCircle(matrix, start, row, col);            ++start;        }        System.out.println();    }    public void PrintMatrixInCircle(int matrix[][], int start, int row, int col){        boolean flags[] = {true, false, false, false}; // 保证先序关系        // step1:打印第一步        int indexX = start;        for(int j=start; j<=(col - start -1); j++){            flags[1] = true;            System.out.print(matrix[indexX][j] + " ");        }        // step2:打印第二步-前提是第一步成功打印        int indexY = col - start -1;        for(int i=(start+1); i<=(row - start -1); i++){            if(flags[1] == false) break;            flags[2] = true;            System.out.print(matrix[i][indexY] + " ");        }        // step3:打印第三步-前提是第二步成功打印        indexX = row - start -1;        for(int j=(col - start -2);j>=start; j--){            if(flags[2] == false) break;            flags[3] = true;            System.out.print(matrix[indexX][j] + " ");        }        // step4:打印第四步-前提是第三步成功打印        indexY = start;        for(int i=(row - start -2); i> start; i--){            if(flags[3] == false) break;            System.out.print(matrix[i][indexY] + " ");        }    }    }

测试代码:

    public class _Q20Test extends TestCase {    _Q20 matrixPrinter = new _Q20();    public void test(){        int matrix1[][] = {                {1, 2, 3, 4},                {5, 6, 7, 8},                {9, 10, 11, 12},                {13, 14, 15, 16}};        int matrix2[][] = {                {1, 2, 3, 4},                {5, 6, 7, 8}};        int matrix3[][] = {{1}}; // 一行一列        int matrix4[][] = {{1, 2, 3, 4}}; // 一行        int matrix5[][] = {{1}, {2}, {3}, {4}}; // 一列        int matrix6[][] = null;        System.out.println("-------------------------matrix1");        matrixPrinter.PrintMatrixClockwisely(matrix1);        System.out.println("-------------------------matrix2");        matrixPrinter.PrintMatrixClockwisely(matrix2);        System.out.println("-------------------------matrix3");        matrixPrinter.PrintMatrixClockwisely(matrix3);        System.out.println("-------------------------matrix4");        matrixPrinter.PrintMatrixClockwisely(matrix4);        System.out.println("-------------------------matrix5");        matrixPrinter.PrintMatrixClockwisely(matrix5);        System.out.println("-------------------------matrix6");        matrixPrinter.PrintMatrixClockwisely(matrix6);    }
1 0
原创粉丝点击