package com.fiberhome.monitor.task; import java.util.ArrayList; import java.util.List; public class Solution11172 { public ArrayList<Integer> printMatrix(int [][] matrix) { ArrayList list = new ArrayList(); int hLength = matrix.length; int vLength = matrix[0].length; int i = 0; int j = vLength; int paramVLength = vLength; int paramHLength = hLength; int count = 0; if(hLength<2){//一维矩阵特殊处理 for(int a =0;a<vLength;a++){ System.out.println(matrix[0][a]); list.add(matrix[0][a]); } } else if(vLength<2){//一维矩阵特殊处理 for(int a =0;a<hLength;a++){ System.out.println(matrix[a][0]); list.add(matrix[a][0]); } } else if(hLength>=2&&vLength>=2){ while(hLength-2 >= 0&&vLength>=2){ list.addAll(printMatrix2(matrix,i,paramVLength,paramHLength,count)); i++; count++; paramVLength--; paramHLength--; hLength = hLength -2 ; vLength = vLength - 2; } if(hLength == 1 ){//遍历完外圈之后剩下的为一维矩阵的处理 for(int a=count;a<paramVLength;a++){ System.out.println(matrix[count][a]); list.add(matrix[count][a]); } }else if(vLength==1){//遍历完外圈之后剩下的为一维矩阵的处理 for(int a=count;a<paramHLength;a++){
System.out.println(matrix[a][count]); list.add(matrix[a][count]); } } } return list; } /** * 循环调用,遍历外圈后将里面的数据继续遍历 * @param matrix * @param m */ private List printMatrix2(int[][] matrix, int m,int paramVLength,int paramHLength,int count) { List list = new ArrayList(); int flag = 0;//0,1,2,3分别表示方向; int i = 0;int j = 0; int tempi=0;int tempj=0; if(paramHLength < 2||paramVLength<2){ return list; } while(!(i==1 && j==0)){//外圈遍历结束 if(flag == 0){ // getList0(); for (int k=m;k< paramVLength;k++){ System.out.println(matrix[m][k]); list.add(matrix[m][k]); } flag ++; }else if(flag == 1){ // getList1(); for (int k=m+1;k< paramHLength;k++){ System.out.println(matrix[k][paramVLength-1]); list.add(matrix[k][paramVLength-1]); } flag ++; }else if(flag == 2){ // getList2(); // if(paramVLength-2<0){ // return list; // } for (int k=paramVLength-2;k>= count;k--){ System.out.println(matrix[paramHLength-1][k]); list.add(matrix[paramHLength-1][k]); } flag ++; }else{ // getList3(); for (int k=paramHLength-2;k>= count;k--){ if(k == count){ return list; } System.out.println(matrix[k][count]); list.add(matrix[k][count]); } } } return list; } public static void main(String[] args) { // int[][] array = {{1,2,3,4},{ 5,6,7,8},{9,10,11,12},{13,14,15,16},{17,18,19,20}}; // int[][] array = {{1,2,3,4,5},{ 6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20},{21,22,23,24,25}}; int[][] array = {{1,2,3,4,5},{ 6,7,8,9,10},{11,12,13,14,15}}; // int[][] array = {{1,2},{3,4}}; // int[][] array = {{1},{2},{3},{4},{5}}; // int[][] array = {{1,2,3,4,5}}; // int[][] array= {{1}}; // int[][] array = {{1,2},{3,4},{5,6},{7,8},{9,10}}; List list = new Solution11172().printMatrix(array); } }
思路:遍历完外圈数组之后,将里圈重新传入再次解析,可将代码copy debugger调试,就会发现通俗易懂