主页 > 开源代码  > 

力扣hot100——螺旋矩阵超简单易懂的模拟搜索方法

力扣hot100——螺旋矩阵超简单易懂的模拟搜索方法

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

解法思路:

// 模拟螺旋搜索设定四个边界 // left right // top |————————————————| // | | // | | // down |————————————————| // 从左往右搜索,搜索完后向下,上边界下移 // 从上往下搜索,搜索完后向左,右边界左移 // 从右往左搜索,搜索完后向上,下边界上移 // 从下往上搜索,搜索完后向右,左边界右移 class Solution { public: vector<int> spiralOrder(vector<vector<int>>& matrix) { // 模拟螺旋搜索设定四个边界 // left right // top |————————————————| // | | // | | // down |————————————————| // 从左往右搜索,搜索完后向下,上边界下移 // 从上往下搜索,搜索完后向左,右边界左移 // 从右往左搜索,搜索完后向上,下边界上移 // 从下往上搜索,搜索完后向右,左边界右移 vector<int> res; int left = 0, right = matrix[0].size(),top = 0, down = matrix.size(); while(left < right && top < down){ // 从左往右搜索,搜索完后向下,上边界下移动 for(int i = left; i < right; i++){ res.push_back(matrix[top][i]); // 上边界行 } ++top; if(top >= down){ // 只有一行 break; } // 从上往下搜索,搜索完后向左,右边界左移 for(int i = top; i < down; i++){ res.push_back(matrix[i][right-1]); // 外边界列 } --right; if(left >= right){ // 只有一列 break; } // 从右往左搜索,搜索完后向上,下边界上移 for(int i = right-1; i>=left;i--){ res.push_back(matrix[down-1][i]); // 下边界行加入 } --down; if(top >= down){ // 遍历结束 break; } // 从下往上搜索,搜索完后向右,左边界右移 for(int i = down-1; i>=top;i--){ res.push_back(matrix[i][left]); // 左边界列 } ++left; if(left >= right){ // 遍历结束 break; } } return res; } };

标签:

力扣hot100——螺旋矩阵超简单易懂的模拟搜索方法由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“力扣hot100——螺旋矩阵超简单易懂的模拟搜索方法