【leetcode100-019】【矩阵】螺旋矩阵

【题干】

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

【思路】

  • 不难注意到,每进行一次转向,都有一行/列被输出(并失效);
  • 既然已经失效,那我们不妨就将这一行/列删去,当然并不是真的删去,其实只要让其无法再被访问(遍历)到就可以了;
  • 那么我们是如何限定遍历的范围的呢,是给遍历指针设定上下界,因此,当我们不想让指针走到某一行/列,用上限把该行/列划到范围之外就可以了;
  • 由于给出的不一定是方阵,所以要为行和列各设定两个变量用于记录当前可遍历范围的下界与上界;
  • 当行方向或列方向之中的某一个范围已经变为0时,意味着矩阵中已经不再有可被遍历的元素,则我们的目的已经达成了。

【题解】

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        vector <int> ans;
        if(matrix.empty()) return ans; //若数组为空,直接返回答案
        int u = 0; //赋值上下左右边界
        int d = matrix.size() - 1;
        int l = 0;
        int r = matrix[0].size() - 1;
        while(true)
        {
            for(int i = l; i <= r; ++i) ans.push_back(matrix[u][i]); //向右移动直到最右
            if(++ u > d) break; //重新设定上边界,若上边界大于下边界,则遍历遍历完成,下同
            for(int i = u; i <= d; ++i) ans.push_back(matrix[i][r]); //向下
            if(-- r < l) break; //重新设定有边界
            for(int i = r; i >= l; --i) ans.push_back(matrix[d][i]); //向左
            if(-- d < u) break; //重新设定下边界
            for(int i = d; i >= u; --i) ans.push_back(matrix[i][l]); //向上
            if(++ l > r) break; //重新设定左边界
        }
        return ans;
    }
};

相关推荐

  1. leetcode100-018】【矩阵矩阵置零

    2023-12-25 12:02:02       41 阅读
  2. LeetCode 54. 螺旋矩阵

    2023-12-25 12:02:02       20 阅读
  3. 1050 螺旋矩阵

    2023-12-25 12:02:02       33 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-25 12:02:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-25 12:02:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-25 12:02:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-25 12:02:02       18 阅读

热门阅读

  1. IP地址与MAC地址的区别与联系

    2023-12-25 12:02:02       32 阅读
  2. python 文本文件的读取

    2023-12-25 12:02:02       42 阅读
  3. Sublime Text快捷命令

    2023-12-25 12:02:02       37 阅读
  4. 华为OD笔试2023C卷命题规律解读

    2023-12-25 12:02:02       54 阅读
  5. vue ant v-decorator的使用

    2023-12-25 12:02:02       40 阅读