虽然不是最优质的解法,但是执行效率还可以 package com.example.ko; public class Demo { /** * 循环打印矩阵 * @param arrays * @return */ public int[] printMatrix(int[][] arrays){ if(null==arrays||arrays.length==0||arrays[0].length==0) { return new int[0]; } int maxRow=arrays.length;//最大行数 int maxCol=arrays[0].length;//最大列数 int row=0,col=0;//当前行,当前列 int resultLength=maxRow*maxCol; int resultIndex=0;//结果集计数 int[] result=new int[resultLength];//结果集 while (row<=maxRow&&col<=maxCol){ //从左向右执行 for (int i = col; i <maxCol ; i++) { result[resultIndex]=arrays[row][i]; resultIndex++; //达到数组最大长度,停止 if(resultIndex==resultLength){ return result; } } //从右上往右下执行, for (int i = row+1; i <maxRow-1 ; i++) { result[resultIndex]=arrays[i][maxCol-1]; resultIndex++; //达到数组最大长度,停止 if(resultIndex==resultLength){ return result; } } //从右下向左下执行 for (int i =maxCol-1; i > col ; i--) { result[resultIndex]=arrays[maxRow-1][i]; resultIndex++; //达到数组最大长度,停止 if(resultIndex==resultLength){ return result; } } //从左下向左上执行 for (int i =maxRow-1; i > row ; i--) { result[resultIndex]=arrays[i][col]; resultIndex++; //达到数组最大长度,停止 if(resultIndex==resultLength){ return result; } } //最外围的上下左右都执行过后,向里缩小一圈 col++; row++; maxCol--; maxRow--; } return result; } public static void main(String[] args) { Demo demo=new Demo(); int[] a={1,2,3,4}; int[] b={5,6,7,8}; int[] c={9,10,11,12}; int[] d={13,14,15,16}; int[][] list={a,b,c,d}; int[] result= demo.printMatrix(list); for (int i = 0; i <result.length ; i++) { System.out.printf(result[i]+" "); } //1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10 } }
顺时针打印矩阵
最新推荐文章于 2024-08-29 22:25:44 发布