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