1.順時針打印矩陣
【題目】
輸入一個矩陣,按照從外向裏以順時針的順序依次打印出每一個數字,例如,如果輸入如下 4 X 4 矩陣: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 則依次打印出數字 1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
【代碼】
public ArrayList<Integer> printMatrix(int [][] matrix) {
int width,height,x,y,count,n;
height = matrix.length;
width = matrix[0].length;
// 遍歷遊標
x = 0;
y = 0;
count = 0;
// 元素個數
n = height * width;
boolean[][] flag = new boolean[height][width];
ArrayList<Integer> list = new ArrayList<>();
while (count < n) {
// x不變,y增加
while (y<width && !flag[x][y]) {
list.add(matrix[x][y]);
flag[x][y] = true;
count ++;
y ++;
}
y--;
x++;
// x增加,y不變
while (x<height && !flag[x][y]) {
list.add(matrix[x][y]);
flag[x][y] = true;
count ++;
x ++;
}
x--;
y--;
// x不變,y減少
while (y>=0 && !flag[x][y]) {
list.add(matrix[x][y]);
flag[x][y] = true;
count ++;
y--;
}
y++;
x--;
// x變少,y不變
while (x>=0 && !flag[x][y]) {
list.add(matrix[x][y]);
flag[x][y] = true;
count ++;
x--;
}
x++;
y++;
}
return list;
}
【思考】
需要注意邊界是否越界以及,遊標(x,y)經過x++或者y++之後,定位在什麼地方,需要進行手動的轉彎。