题目详述
题目链接:二维数组打印
思路解析
右上角的坐标startX = 0,startY = n-1。最左小角的数据坐标为(n-1,0),当这个数字打印完后,横坐标+1,超出了行数,打印结束。规律如上图所说:横坐标+1,纵坐标+1。
程序测试
public class Printer {
public int[] arrayPrint(int[][] arr, int n) {
int[] res = new int[n*n];
int index = 0;
int startX = 0;
int startY = n-1;
while(startX < n){
int x = startX;
int y = startY;
while(x < n && y < n) {
//System.out.println("x:" + x + " y:" + y);
res[index++] = arr[x++][y++];
}
if(startY > 0) {
//System.out.println("Y--");
startY--;//确定新的开始纵坐标
} else {
//System.out.println("X++");
startX++;//确定新的开始横坐标
}
}
return res;
/**
* x:0 y:3
* Y--
* x:0 y:2
* x:1 y:3
* Y--
* x:0 y:1
* x:1 y:2
* x:2 y:3
* Y--
* x:0 y:0
* x:1 y:1
* x:2 y:2
* x:3 y:3
* X++
* x:1 y:0
* x:2 y:1
* x:3 y:2
* X++
* x:2 y:0
* x:3 y:1
* X++
* x:3 y:0
* X++
*/
}
}