package 剑指Offer.二维矩阵.顺时针打印矩阵; /** * @program:多线程和IO * @descripton:顺时针向内打印数组 * @ 例如给定一个二维数组 [1,2,3] [1 ,2 ,3 ,4] * [4,5,6] [5 ,6 ,7 ,8] * [7,8,9] [9,10,11,12] * @ 我们需要输出 123698745 [13,14,15,16] * @author:ZhengCheng * @create:2021/10/19-19:50 **/ public class ClockPrint { public static void main(String[] args) { //初始化一个二维矩阵 int[][] arr = new int[4][4]; int k = 1; for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr[i].length; j++) { arr[i][j] = k++; } } // new ClockPrint().show(arr); new ClockPrint().clockPrint(arr); } // 遍历检查 矩阵 /*private void show(int[][] arr){ for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr[i].length; j++) { System.out.print(arr[i][j]); } System.out.println(); } }*/ private void clockPrint(int[][] arr) { //设定四个指针 int top = 0; int left = 0; int right = arr[1].length - 1; int bottom = arr.length - 1; int i = 0; int j = 0; while (top <= bottom && left <= right) { //四方遍历 →↓←↑ while (j < right) { System.out.print(arr[i][j++] + "-"); } top++; while (i < bottom) { System.out.print(arr[i++][j] + "-"); } right--; while (j > left) { System.out.print(arr[i][j--] + "-"); } bottom--; while (i > top) { System.out.print(arr[i--][j] + "-"); } left++; if (top > bottom || left > right) { System.out.print(arr[i][j]); } } } }
剑指Offer - 顺时针输出矩阵
最新推荐文章于 2024-07-19 15:45:46 发布