Java 剑指offer

xiaoxiao2021-02-27  453

题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。

例如:如果输入如下矩阵:

 1    2     3     4

 5    6     7     8

 9   10   11   12

13  14  15   16

则依次打印出数字:1、2、3、4、8、12、16、15、14、13、9、5、6、7、11、10。

思路如下:

算法如下:

[java]  view plain  copy import java.util.ArrayList;   public class Solution {       public ArrayList<Integer> printMatrix(int [][] matrix) {           if (matrix == null)               return null;           ArrayList<Integer> result = new ArrayList<Integer>();           int start = 0;           while(matrix[0].length > start *2 && matrix.length > start *2){               printMatrixInCircle(matrix,result,start);               start++;           }           return  result;       }           public static void printMatrixInCircle(int [][]matix,ArrayList<Integer>result,int start){           int endX = matix[0].length - start -1;           int endY = matix.length - start -1;          //从左向右打印一行           for(int i = start;i <=endX;i++){               result.add(matix[start][i]);           }           //从上到下           for(int i  = start+1; i <=endY;i++)               result.add(matix[i][endX]);           //从右到左           if(start < endX &&start < endY)               for(int i = endX -1;i>= start;i--)                   result.add(matix[endY][i]);           //从下到上           if(start < endX && start < endY-1)               for(int i = endY - 1;i >=start+1;i--)                   result.add(matix[i][start]);       }   }  

转载请注明原文地址: https://www.6miu.com/read-1432.html

最新回复(0)