昆明网络营销网站,制作好的网站,番禺建设网站服务,阿里云主机安装wordpress今天我们来看这道螺旋矩阵#xff0c;和昨天发的题很类似。没有技巧#xff0c;全是循环。小白也能懂~ 力扣54.螺旋矩阵 题目描述#xff1a; 给你一个 m 行 n 列的矩阵 matrix #xff0c;请按照 顺时针螺旋顺序 #xff0c;返回矩阵中的所有元素。 示例 1#xff1a; …今天我们来看这道螺旋矩阵和昨天发的题很类似。没有技巧全是循环。小白也能懂~ 力扣54.螺旋矩阵 题目描述 给你一个 m 行 n 列的矩阵 matrix 请按照 顺时针螺旋顺序 返回矩阵中的所有元素。 示例 1 输入matrix [[1,2,3],[4,5,6],[7,8,9]] 输出[1,2,3,6,9,8,7,4,5] 示例 2 输入matrix [[1,2,3,4],[5,6,7,8],[9,10,11,12]] 输出[1,2,3,4,8,12,11,10,9,5,6,7]
思路 1、我们可以根据这个例图来定义一下变量确定该有的左右边界上下边界。 2、我们还需要一个结果数组来保存矩阵。 3、左边不大于等于右边的时候上边不大于等于下面才能进行以下四个循环 从左到右 从上到下 从右到左 从下到上 -》循环的时候要考虑加加减减更新边界值。 -》循环遍历后根据行列对应的边界值插入到数组中 4、最后返回结果数组
运行代码及注释
class Solution {
public:vectorint spiralOrder(vectorvectorint matrix) {vectorint result; // 定义一个结果数组int left 0; // 定义左边界值int right matrix[0].size(); // 定义右边界值因为是矩阵int top 0; // 定义矩阵上边界int bottom matrix.size(); // 定义矩阵下边界while (left right top bottom) { // 当条件成立循环持续// 从左到右遍历for (int i left; i right; i) {result.push_back(matrix[top][i]);//matrix[top][i]里的值对应top行 i列}top;//更新topif (top bottom) {break;//如果topbottom证明越界就结束遍历}// 从上到下遍历for (int j top; j bottom; j) {result.push_back(matrix[j][right - 1]);//matrix[j][right - 1]j行[right - 1]列}--right;//right向前移动if (left right) {break;如果left right证明越界就结束遍历}// 从右到左遍历for (int k right - 1; k left; --k) {result.push_back(matrix[bottom - 1][k]);}--bottom;if (top bottom) {break;}// 从下到上遍历for (int l bottom - 1; l top; l--) {result.push_back(matrix[l][left]);}left;}return result;//返回结果数组}};总结
这道题目和昨天的题目是差不多的要注意边界并且更新边界进行循环遍历每行每列数组不明白边界的可以看看我之前的二分查找还有上一个螺旋矩阵题目呀~希望对你有所帮助