题目:剑指 Offer 29. 顺时针打印矩阵 - 力扣(Leetcode)
题目的接口:
class Solution { public: vector spiralOrder(vector>& matrix) { } };
解题思路:
这道题的思路也比较简单,
就是实现起来对边界的控制能力要求比较高,
根据题意顺时针打印矩阵,
先判断该矩阵是否为空;
然后,
我们通过控制上右下左四个边界打印。
(设置四个变量作为下标访问矩阵)
根据这个顺序循环:
打印上边界的值,然后更新上边界;
打印右边界的值,然后更新右边界;
打印下边界的值,然后更新下边界;
打印左边界的值,然后更新左边界;
每次打印完都判断矩阵是否已经打印完成,
如果矩阵已经打印完成,就跳出循环,
返回打印的值即可。
代码:
class Solution { public: vector spiralOrder(vector>& matrix) { //建一个vector存放需要打印的值 vector v; //判断矩阵是否为空 if(matrix.size() == 0) { return v; } //控制边界: //上边界 int top = 0; //下边界 int bottom = matrix.size() - 1; //左边界 int left = 0; //右边界 int right = matrix[0].size() - 1; //循环打印矩阵 while(1) { //从左往右 for(int i = left; i <= right; i++) { v.push_back(matrix[top][i]); } //更新上边界,并判断是否打印完成 if(++top > bottom) { break; } //从上往下 for(int i = top; i <= bottom; i++) { v.push_back(matrix[i][right]); } //更新右边界,并判断是否打印完成 if(--right < left) { break; } //从右往左 for(int i = right; i >= left; i--) { v.push_back(matrix[bottom][i]); } //更新下边界,并判断是否打印完成 if(--bottom < top) { break; } //从下往上 for(int i = bottom; i >= top; i--) { v.push_back(matrix[i][left]); } //更新左边界,并判断是否打印完成 if(++left > right) { break; } } //返回 return v; } };
过啦!!!
写在最后:
以上就是本篇文章的内容了,感谢你的阅读。
如果喜欢本文的话,欢迎点赞和评论,写下你的见解。
如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。
之后我还会输出更多高质量内容,欢迎收看。