【剑指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
- 【剑指offer-Java版】20顺时针打印矩阵
- 剑指Offer:顺时针打印矩阵(JAVA)
- 剑指offer:顺时针打印矩阵(java)
- 剑指offer--面试题20:顺时针打印矩阵--Java实现
- 剑指Offer面试题20:顺时针打印矩阵 Java实现
- 剑指offer(20)顺时针打印矩阵
- 剑指offer 20 - 顺时针打印矩阵
- 剑指Offer-20-顺时针打印矩阵
- 剑指Offer 20 顺时针打印矩阵
- 剑指offer-20:顺时针打印矩阵
- 【剑指offer】题20:顺时针打印矩阵
- 剑指offer 20 顺时针打印矩阵
- 【剑指offer】顺时针打印矩阵
- 剑指offer--顺时针打印矩阵
- 剑指offer--顺时针打印矩阵
- 剑指offer 顺时针打印矩阵
- 剑指offer:顺时针打印矩阵
- 《剑指offer》顺时针打印矩阵
- 用Hopper搞定Mac迅雷的会员以及离线下载功能
- Debugging Native Android Platform Code
- df 和 du 命令详解
- 带你吃透RTMP
- clipDrawable详解
- 【剑指offer-Java版】20顺时针打印矩阵
- Python的__slots__
- 上传文件至服务器(汇总)
- 经典英文美文选集
- 2015年度新增开源软件排名TOP100
- [剑指offer]二叉树的镜像
- nginx平台初探(100%)
- java相关网站
- bzoj 1597: [Usaco2008 Mar]土地购买(斜率优化)