已解决
算法训练第六十五天|螺旋遍历二维数组
来自网友在路上 173873提问 提问时间:2023-09-25 00:01:16阅读次数: 73
最佳答案 问答题库738位专家为你答疑解惑
LCR 146. 螺旋遍历二维数组 - 力扣(LeetCode)
总结:本质是模拟一个螺旋的过程,其中关键是如何限制边界条件或者说是循环结束条件。题目要求是按从左到右、从上到下、从右到左、从下到上的顺序,所以可以设置循环来完成,然后对其中的边界进行界定。
代码:
class Solution {
public:vector<int> spiralArray(vector<vector<int>>& array) {vector<int> res;if(array.size() == 0)return res;int l = 0;int r = array[0].size() - 1;int t = 0;int b = array.size() - 1;while(true){for (int i = l; i <= r; i++) res.push_back(array[t][i]);if (++t > b) break;for (int i = t; i <= b; i++) res.push_back(array[i][r]);if (--r < l) break;for (int i = r; i >= l; i--) res.push_back(array[b][i]);if (--b < t) break;for (int i = b; i >= t; i--) res.push_back(array[i][l]);if (++l > r) break;}return res;}
};
这里要提一下另一道题目:59. 螺旋矩阵 II - 力扣(LeetCode)
这两道题目都比较相似,都是模拟一个螺旋的过程,主要区别在于第二道题的螺旋矩阵一定是一个正方形,在解题方法上也有些许区别,相同点是都是利用循环来完成,不同点是第一种更妙。
代码:
class Solution {
public:vector<vector<int>> generateMatrix(int n) {int loop = n / 2;int mid = n / 2;int startx = 0;int starty = 0;int offset = 1;int i,j;int count = 1;vector<vector<int>> res(n, vector<int>(n, 0));while(loop){i = startx;j = starty;for(j = starty;j < n - offset;j++)res[startx][j] = count++;for(i = startx; i < n - offset;i++)res[i][j] = count++;for(;j > starty;j--)res[i][j] = count++;for(;i > startx;i--)res[i][j] = count++;startx++;starty++;offset++;loop--;}if(n % 2 != 0)res[mid][mid] = n * n;return res;}
};
查看全文
99%的人还看了
相似问题
- HFSS螺旋线圈的设计与仿真
- 软件过程模型分析与适应场景: 瀑布、原型、增量、螺旋、组件化和统一模型简介
- 开发模型(瀑布、螺旋、scrum) 和 测试模型(V、W)、增量和迭代、敏捷(思想)及敏捷开发 scrum
- 数据结构与算法之矩阵: Leetcode 134. 螺旋矩阵 (Typescript版)
- 25期代码随想录算法训练营第二天 | 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II
- 螺旋矩阵[中等]
- 力扣每日一题59:螺旋矩阵||
- 【LeetCode】54. 螺旋矩阵
- 【算法训练-数组 三】【数组矩阵】螺旋矩阵、旋转图像、搜索二维矩阵
- JAVA编程题-求矩阵螺旋值
猜你感兴趣
版权申明
本文"算法训练第六十五天|螺旋遍历二维数组":http://eshow365.cn/6-13097-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: 法线贴图的视线原理
- 下一篇: 利用fiddler正向代理前端请求到本地后端