输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
示例 2:
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]
链接:https://leetcode-cn.com/problems/shun-shi-zhen-da-yin-ju-zhen-lcof
public static void main(String[] args) { // TODO Auto-generated method stub int [][]matrix = { //left right {1,2,3}, //upper {5,6,7}, {9,10,11}, {13,14,15}//down }; int[] order = spiralOrder(matrix); for(int i:order) { System.out.print(i+" "); } } public static int[] spiralOrder(int[][] matrix) { int col = matrix[0].length; //3列 int row =matrix.length ; //4行 if(row==0) { return new int[0]; } int [] ret = new int[col*row]; int index = 0; int left =0; int right=col-1; int upper=0; int down =row-1 ; while(index<ret.length) { for(int i=left;i<=right;i++) { ret[index++]=matrix[upper][i]; if(index == ret.length){ return ret; } } upper++;//第一行遍历完了 upper++,进入下一行 for(int i=upper;i<=down;i++) { ret[index++]=matrix[i][right]; if(index == ret.length){ return ret; } } right--; //最右边的列遍历完了right--,进入左边的一列 for(int i=right;i>=left;i--) { ret[index++]=matrix[down][i]; if(index == ret.length){ return ret; } } down--; //最下一层遍历完了down--,进入上一行 for(int i=down;i>=upper;i--) { ret[index++]=matrix[i][left]; if(index == ret.length){ return ret; } } left++;//最左边的一列遍历完了left++,进入下一列 } return ret; }
原文:https://www.cnblogs.com/cocobear9/p/13054361.html