题解 | #牧场边界巡游#

牧场边界巡游

https://www.nowcoder.com/practice/bc7fe78f7bcc49a8bc0afdd7a55ca810

考察的知识点:遍历矩阵;

解答方法分析:

  1. 定义变量m和n,分别表示输入矩阵的行数和列数。定义变量index,代表当前已经遍历的元素个数,初始值为0。定义变量amount,表示矩阵中元素的总个数,即m乘以n。定义一个一维数组arr,用于存储按照螺旋顺序遍历的元素。还定义了一个二维数组vis,用于标记矩阵中已经遍历过的元素,初始值都为false。最后,定义两个变量i和j,分别代表当前遍历的位置的行号和列号,初始值为-1和0。
  2. 通过一个while循环,当index小于amount时进行遍历。在循环中执行以下操作:向下遍历:通过一个内部的while循环,当i+1仍在矩阵范围内并且vis[i+1][j]为false时,将i增加1,标记vis[i][j]为true,将matrix[i][j]的值存入arr[index],并将index增加1。这个内部循环结束后,表示向下遍历完成。向右遍历:通过一个内部的while循环,当j+1仍在矩阵范围内并且vis[i][j+1]为false时,将j增加1,标记vis[i][j]为true,将matrix[i][j]的值存入arr[index],并将index增加1。这个内循环结束后,表示向右遍历完成。向上遍历:通过一个内部的while循环,当i-1仍在矩阵范围内并且vis[i-1][j]为false时,将i减少1,标记vis[i][j]为true,将matrix[i][j]的值存入arr[index],并将index增加1。这个内部循环结束后,表示向上遍历完成。向左遍历:通过一个内部的while循环,当j-1仍在矩阵范围内并且vis[i][j-1]为false时,将j减少1,标记vis[i][j]为true,将matrix[i][j]的值存入arr[index],并将index增加1。这个内部循环结束后,表示向左遍历完成。
  3. 循环结束后,arr中即为按照螺旋顺序遍历矩阵的结果。将arr作为函数的返回值。

所用编程语言:C++;

完整编程代码:↓

class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param matrix int整型vector<vector<>>
     * @return int整型vector
     */
    vector<int> spiralTravelCounterClockwise(vector<vector<int> >& matrix) {
        int m = matrix.size();
        int n = matrix[0].size();
        int index = 0;
        int amount = m * n;
        vector<int> arr(amount);
        vector<vector<bool>> vis(m, vector<bool>(n, false));
        int i = -1;
        int j = 0;
        while (index < amount) {
            while (i + 1 < m && !vis[i + 1][j]) {
                i++;
                vis[i][j] = true;
                arr[index++] = matrix[i][j];
            }
            while (j + 1 < n && !vis[i][j + 1]) {
                j++;
                vis[i][j] = true;
                arr[index++] = matrix[i][j];
            }
            while (i - 1 >= 0 && !vis[i - 1][j]) {
                i--;
                vis[i][j] = true;
                arr[index++] = matrix[i][j];
            }
            while (j - 1 >= 0 && !vis[i][j - 1]) {
                j--;
                vis[i][j] = true;
                arr[index++] = matrix[i][j];
            }
        }
        return arr;
    }
};

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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