public ArrayList<Integer> printMatrix(int [][] matrix) {
ArrayList<Integer> l1= new ArrayList<>();
int i = 0 ; //代表横坐标
int j = 0 ; //代表纵坐标
boolean flag1 = false ; //标志变量,当向右方向或者向下方向时为false,当向左方向或者向上方向时为true
boolean flag2 = false ; //标志变量,当为false时,横坐标不变纵坐标移动,当为true时纵坐标不变,横坐标移动
int t1 = matrix.length; //求出行数
int t2 = matrix[0].length; //求出列数
int t3 = -1 ; //标志位
int t4 = 0 ; //标志位
int count = t1*t2; //元素总个数
while(count > 0) { //当元素没有添加完,就继续添加元素
while( !flag1 ) { //向右或者向下
if(count <= 0) { //如果已经添加完就跳出
break;
}
while( !flag2) { //向右
l1.add(matrix[i][j]);
count -- ;
j ++;
if( j == t2 ) //已经把一行添加完,修改标志变量
flag2 = true;
}
j--; //j--,把光标定位回刚刚添加元素的列号
i++; //因为对应i,j的位置已经添加过,所以把i++
t2 --; //下一次同一个方向时,添加元素的数量肯定要减一
while(flag2) {
if(count <= 0) {
break;
}
l1.add(matrix[i][j]);
count --;
i++;
if(i == t1) {
flag2 = false; //向右向下已经结束,所以把flag1标志变量也进行修改了
flag1 = true;
}
}
t1 --;
i -- ;
j --;
}
while(flag1) {
if(count <= 0) {
break;
}
while( !flag2) {
l1.add(matrix[i][j]);
count --;
j --;
if( j == t3 )
flag2 = true;
}
j++;
t3++;
i--;
while(flag2) {
if(count <= 0) {
break;
}
l1.add(matrix[i][j]);
count --;
i--;
if(i == t4) {
flag2 = false;
flag1 = false;
}
}
j ++ ;
i++;
t4++;
}
}
return l1;
}
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,
最新推荐文章于 2024-07-08 09:09:54 发布