经典指数          
原因
2258
浏览数
0
收藏数
 

对于一个矩阵,请设计一个算法从左上角(mat[0][0])开始,顺时针打印矩阵元素。 给定int矩阵mat,以及它的维数nxm,请返回一个数组,数组中的元素为矩阵元素的顺时针输出。 测试样例: [[1,2],[3,4]],2,2 返回:[1,2,3,4]

     举报   纠错  
 
切换
1 个答案

import java.util.*;

public class Printer {

    public int[] clockwisePrint(int[][] mat, int n, int m) {

            // write code here

            int[] a = new int[n*m];

            int k=0;

            int startX=0,startY=0;

            int endX=n-1,endY=m-1;

             while((startX <= endX) && (startY <= endY)){

                //6

                System.out.println("111111111");

                if (startX == endX) {

                    for (int i = startY; i <= endY; i++ ) {

                        System.out.println(mat[startX][i]);

                        a[k++]=mat[startX][i];

                    }

                    return a;

                }

               

                // only one column left

               

                if (startY == endY) {

                    for (int i = startX; i <= endX; i++ ) {

                        System.out.println(mat[i][endY]);

                        a[k++]=mat[i][endY];

                    }

                    return a;

                }

                for(int i=startY;i

                    System.out.println(mat[startX][i]);

                    a[k++]=mat[startX][i];

                }

                //2

                for(int i=startX;i

                    System.out.println(mat[i][endY]);

                   a[k++]=mat[i][endY];

                }

                //4

                for(int i=endY;i>startY;i--){

                    System.out.println(mat[endX][i]);

                    a[k++]=mat[endX][i];

                }

                //8

                for(int i=endX;i>startX;i--){

                    System.out.println(mat[i][startY]);

                    a[k++]=mat[i][startY];

                }

                startX++;

                startY++;

                endX--;

                endY--;

                System.out.println("startX   "+startX);

                System.out.println("startY   "+startY);

                System.out.println("endX   "+endX);

                System.out.println("endY   "+endY);

            }

            return a;

        }

}

 
切换
撰写答案