【題目】 給定一個矩陣matrix,按照“之”字形的方式打印這 個矩陣,例如:1 2 3 45 6 7 89 10 11 12 “之”字形打印的結果爲:1,2,5,9,6,3,4,7,10,11, 8,12
【要求】 額外空間複雜度爲O(1)。
暴力解題思路:
通過createPoint()函數,根據第一列的座標值生成整個斜線的座標值,然後通過flag決定是否反轉.
public class SquarePrinter {
public void print(int [] [] arr){
boolean flag = false;
int [] rP = new int[] {0,0};
while (true){
int [][] points = createPoint(rP);
if (points == null){
pPoints(new int [][]{{0,0}},arr);
rP[0]++;
continue;
}else {
if (flag){
pPoints(points,arr);
flag = !flag;
}else {
revers(points);
pPoints(points,arr);
flag = !flag;
}
}
if (rP[0] < arr[1].length - 1){
rP[0] ++;
}else if (rP[1] < arr[0].length -1){
rP[1] ++;
}else {
break;
}
}
}
public int [][] createPoint(int [] rP){
if (rP[0] == 0 && rP[1] == 0){
return null;
}
int len = rP[0] + 1 - rP[1];
int [][] points = new int [len][2];
int x = rP[0];
int y = rP[1];
points[0][0] = rP[0];
points[0][1] = rP[1];
for (int i = 1; i < len; i++){
points[i][0] = --x;
points[i][1] = rP[0] - x + y;
}
return points;
}
public void pPoints(int [][] points,int [][] data){
for (int i = 0; i < points.length;i++){
System.out.print (data[points[i][0]][points[i][1]] + " ");
}
System.out.println();
}
public void revers(int [][] points){
int len = points.length;
for (int i = 0; i< len; i++){
int temp = points[i][0];
points[i][0] = points[i][1];
points[i][1] = temp;
}
}
}
明天看一下左神的代碼,學習一下他的思路.