主页 > 互联网  > 

【LeetCode】剑指Offer(11)

【LeetCode】剑指Offer(11)

目录 

题目:剑指 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; } }; 过啦!!!

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果喜欢本文的话,欢迎点赞和评论,写下你的见解。

如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。

之后我还会输出更多高质量内容,欢迎收看。

标签:

【LeetCode】剑指Offer(11)由讯客互联互联网栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【LeetCode】剑指Offer(11)