顺时针打印矩阵中的数字
public static void main(String[] args){
int[][] array = {{1,2,3,4},
{6,7,8,9},
{11,12,13,14},
{16,17,18,19},
{21,22,23,24}};
int rows = array.length;
int cols = array[0].length;
printNum(array,0,rows-1,0,cols-1);
}
public static void printNum(int[][] array,int left,int right,int top,int bottom){
if(left>right&&top>bottom) return;
if(left<=right){
for(int i=left;i<=right;i++){
System.out.print(array[top][i]+",");
}
}
top = top+1;
if(top<=bottom){
for(int i=top;i<=bottom;i++){
System.out.print(array[i][right]+",");
}
}
right = right-1;
if(right>=left){
for(int i=right;i>=left;i--){
System.out.print(array[bottom][i]+",");
}
}
bottom = bottom-1;
if(bottom>=top){
for(int i=bottom;i>=top;i--){
System.out.print(array[i][left]+",");
}
}
left = left + 1;
printNum(array,left,right,top,bottom);
}
结果如下图:
总结:
1.没有想到可以用四个变量来表示每一轮的状态
2.行和列弄混了
3.一开始写的是printNum(array,left+1,right-1,top+1,right-1);没有考虑到角落的数据已经被打印过
4.重点:left、right、top、bottom在每个for循环之后的变化