题解 | #牧场边界巡游#
牧场边界巡游
https://www.nowcoder.com/practice/bc7fe78f7bcc49a8bc0afdd7a55ca810
知识点:矩阵遍历
分析:本题不用深度遍历,使用递归反而麻烦,因为要优先遍历某一行或一列。只要将某一行或列加载到一个循环即可,按照题目要求的逆时针,顺序是【down --> right --> up --> left】,设置四个二层循环。边界条件可以使用二维访问数组。
时间复杂度O(m*n),空间复杂度O(m*n)
import java.util.*;
public class Solution {
public int[] spiralTravelCounterClockwise (int[][] matrix) {
int m = matrix.length, n = matrix[0].length;
int index = 0, amount = m * n;
int[] arr = new int[amount];
boolean[][] vis = new boolean[m][n];
int i = -1, j = 0;
while (index < amount) {
//down
while (i + 1 < m && !vis[i + 1][j]) {
i++;
vis[i][j] = true;
arr[index++] = matrix[i][j];
}
//right
while (j + 1 < n && !vis[i][j + 1]) {
j++;
vis[i][j] = true;
arr[index++] = matrix[i][j];
}
//up
while (i - 1 >= 0 && !vis[i - 1][j]) {
i--;
vis[i][j] = true;
arr[index++] = matrix[i][j];
}
//left
while (j - 1 >= 0 && !vis[i][j - 1]) {
j--;
vis[i][j] = true;
arr[index++] = matrix[i][j];
}
}
return arr;
}
}
