给定一个整型的矩阵,按照转圈的方式打印。要求额外的空间复杂度为O(1)。
思路:这个题我们可以进行一圈一圈的来进行打印。定义一个转圈打印的函数,每次将左上角和右下角的坐标给传递过去。这个题与旋转矩阵的思路是一样的,都是以圈为单位进行操作。只需要考虑每一圈怎么操作就好。
package lianxi03;
public class Code07_PrintMatrix {
public static void main(String[] args) {
int[][] arr={ { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 }, { 13, 14, 15, 16 } };
PrintMatrix(arr);
System.out.println();
int[][] arr1={{1,2,3,10},{4,5,6,11},{7,8,9,12}};
PrintMatrix(arr1);
}
public static void PrintMatrix(int[][] arr){
int row=arr.length;
int col=arr[0].length;
int RUp=0;
int CUp=0;
int RDown=row-1;
int CDown=col-1;
while(CUp<=CDown&&RUp<=RDown){
printEdge(arr,RUp++,CUp++,RDown--,CDown--);
}
}
public static void printEdge(int[][] arr,int UR,int UC,int DR,int DC){
int m=UR;int n=UC;
if(UR==DR){
while (UC<=DC)
System.out.print(arr[UR][UC++]+" ");
}else if(UC==DC){
while (UR<=DR)
System.out.print(arr[UR++][UC]+" ");
}else{
while (n<DC)
System.out.print(arr[m][n++]+" ");
while(m<DR)
System.out.print(arr[m++][n]+" ");
while (n>UC){
System.out.print(arr[m][n--]+" ");
}
while(m>UR){
System.out.print(arr[m--][n]+" ");
}
}
}
}