定义四个变量代表范围,up、down、left、right
向右走存入整行的值,当存入后,该行再也不会被遍历,代表上边界的 up 加一,同时判断是否和代表下边界的 down 交错
向下走存入整列的值,当存入后,该列再也不会被遍历,代表右边界的 right 减一,同时判断是否和代表左边界的 left 交错
向左走存入整行的值,当存入后,该行再也不会被遍历,代表下边界的 down 减一,同时判断是否和代表上边界的 up 交错
向上走存入整列的值,当存入后,该列再也不会被遍历,代表左边界的 left 加一,同时判断是否和代表右边界的 right 交错
public ArrayList<Integer> printMatrix(int [][] matrix) {
ArrayList<Integer> list = new ArrayList<>();
if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
return list;
}
int up = 0;
int down = matrix.length-1;
int left = 0;
int right = matrix[0].length-1;
while (true) {
for (int col = left;col<=right;col++) {
list.add(matrix[up][col]);
}
up++;
if (up>down) {
break;
}
for (int row = up;row<=down;row++) {
list.add(matrix[row][right]);
}
right--;
if (right<left) {
break;
}
for (int col = right;col>=left;col--) {
list.add(matrix[down][col]);
}
down--;
if (up>down) {
break;
}
for (int row = down;row>=up;row--) {
list.add(matrix[row][left]);
}
left++;
if (left>right) {
break;
}
}
return list;
}