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