1 题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
2 解法描述
- 确定需要打印的圈
- 如何打印每一圈
设定每一圈的开始 row_start 和结束行 row_end,设定每一圈的开始 col_start 和结束列 col_end。如果以下逻辑判断成立,那么所有的圈已经打印完成
!(col_start<=col_end&&row_start<=row_end)
3 java 语言实现
public class PrintMatrix {
static void printMatrix(int[][] numbers,int rows,int columns){
int col_start=0;
int col_end=columns-1;
int row_start=0;
int row_end=rows-1;
if(numbers==null||rows<=0||columns<=0){
throw new RuntimeException("非法输入");
}
while(col_start<=col_end&&row_start<=row_end){
//打印这一圈
printCircle(col_start,col_end,row_start,row_end,numbers);
col_start++;
col_end--;
row_start++;
row_end--;
}
}
static void printCircle(int cs,int ce,int rs,int re,int[][] numbers){
int tempcs=cs;
int tempce=ce;
int temprs=rs;
int tempre=re;
//打印上面一行,行不变,列数递增
while(tempcs<=ce){
System.out.print(numbers[rs][tempcs++]);
}
//打印右边一列,列不变,行数递增
while(++temprs<=re){
System.out.print(numbers[temprs][ce]);
}
//打印下面一行,行不变,列数递增 cs!=ce 防止重复打印行
while(rs!=re&&--tempce>=cs){
System.out.print(numbers[re][tempce]);
}
//打印左面一列,列不变,行数递增 cs!=ce 防止重复打列
while(cs!=ce&&--tempre>rs){
System.out.print(numbers[tempre][cs]);
}
System.out.println();
}
public static void main(String[] args) {
int a1[][]={{1,2,3}, {4,5,6}, {7,8,9}};
int a2[][]={{1,2,3}};
int a3[][]={{1},{2},{3}};
int a4[][]={{1}};
int a5[][]=null;
int a6[][]={{1,2,3}, {4,5,6}, {7,8,9},{10,11,12}};
int a7[][]={{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};
printMatrix(a7,3,4);
}
}