import java.util.*;
public class Printer {
/*
* 本算法仅对方阵适用
*/
public int[] arrayPrint(int[][] arr, int n) {
/*
* 从矩阵的右上方,向左下方沿主对角线,从左上到右下斜打印每个元素
* row col 也就是行、列下标初始化为右上角的元素坐标
*/
int row = 0;
int col = n - 1;
/*
* list 建立新的整型数组,用来挨个存放斜打印时的元素
* pos 是list数组的迭代指针,也就是下标
*/
int[] list = new int[n * n];
int pos = 0;
/*
* 因为是斜着打印,所以总的出口是:最后row也就是行下标有没有出界
*/
while(row < n) {
/*
* 斜打印每一斜行时,需要用到的临时行、列下标变量i j
*/
int i = row;
int j = col;
/*
* 只要每一斜行还有元素,就将它赋值到list数组中去
*/
while(i < n && j < n) {
list[pos] = arr[i][j];
pos++;
i++;
j++;
}
/*
* 以下两个if的含义是:
* 每打印完一斜行,就要判断:是否已经打印到并且打印完反对角线上元素?
* 是:col也就是列下标不能继续往下减,反而是row也就是行下标要往上加
* 否:col也就是列下标继续往下减,而row也就是行下标不能往上加
*/
if(i < n && j == n) {
col--;
}
if(i == n) {
row++;
}
} // while row < n
return list;
}
}
二维数组的打印
最新推荐文章于 2023-01-06 16:16:11 发布