题目:输入一个矩阵,按照从外向里以顺时针的顺序依次扫印出每一个数字
解题思路:
可以发现,其实就是四种操作(右、下、左、上),循环执行。
记录每个元素的被访问状态,并且要注意边界条件的判断。
代码实现:
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printMatrix(int [][] matrix) {
ArrayList<Integer> result = new ArrayList<Integer>();
int rowLen = matrix.length;
int columnLen = matrix[0].length;
int[][] status = new int[matrix.length][matrix[0].length];
int i = 0;
int j = -1;
while ((j + 1) < columnLen && status[i][j + 1] == 0) {
j++;
result.add(matrix[i][j]);
status[i][j] = 1;
while ((j + 1) < columnLen && status[i][j + 1] == 0) {
j++;
result.add(matrix[i][j]);
status[i][j] = 1;
}
while ((i + 1) < rowLen && status[i + 1][j] == 0) {
i++;
result.add(matrix[i][j]);
status[i][j] = 1;
}
while ((j - 1) >= 0 && status[i][j - 1] == 0) {
j--;
result.add(matrix[i][j]);
status[i][j] = 1;
}
while ((i - 1) >= 0 && status[i - 1][j] == 0) {
i--;
result.add(matrix[i][j]);
status[i][j] = 1;
}
}
return result;
}
}