题解 | #牧场边界巡游#

牧场边界巡游

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;
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务