顺时针打印矩阵

来源:互联网 发布:蚂蚁系统分类数据调用 编辑:程序博客网 时间:2024/05/20 07:34

题目:

输入一个矩阵,按照从外向里的方式按照顺时针依次打印出每一个数字。

输入:

{{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}};

输出:

1 2 3 4 5 10 15 20 25 24 23 22 21 16 11 6 7 8 9 14 19 18 17 12 13 

解题思路:

我们首先可以把矩阵想象成若干个圈,然后不停的向内压缩。然后分析判断条件,首先,我们发现无论是第几圈,左上角位置列和行的坐标总是相同,所以我们可以从一个圈的左上角作为分析条件,对于一个5*5的队列,最后一圈的坐标为(2,2),我们发现最后一圈的坐标2*2<5.所以我么你的判断条件为2*startx<rows && 2*starty<cols

java代码实现:

public static void main(String[] args) {// TODO Auto-generated method stubint[][] arr={{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}};print(arr, 5, 5);}/** *  * @param arr 数组矩阵 * @param rows 行数 * @param cols  列数 */private static void print(int[][] arr,int rows,int cols){if(arr==null || rows<0 ||cols<0){return ;}int start=0;while(start*2<rows &&start*2<cols){PrintMatrix(arr, rows, cols, start++);}} private static void PrintMatrix(int[][] arr,int rows,int cols,int start){ int endx=cols-start; int endy=rows-start; //从左到右是一定会输出的 for(int i=start;i<endx;i++){ System.out.print(arr[start][i]+" "); }  // 从上到下的条件为大于2列 if (start < endy-1) { for(int i=start+1;i<endy;i++){ System.out.print(arr[i][endx-1]+" "); } } //从右到左的条件为大于2列并且大于两行 if(start<endy-1&&start<endx-1){ for(int i=endx-2;i>=start;i--){ System.out.print(arr[endy-1][i]+" "); } }  //从下到上三行两列 if(start<endy-2&&start<endx-1){  for(int i=endy-2;i>start;i--){  System.out.print(arr[i][start]+" ");  } } }



0 0
原创粉丝点击