每日编程一题刷之轻松解决螺旋矩阵(Leetcode)

每日编程一题刷之教你一招搞定螺旋矩阵(LeetCode)

目录侠‍

文章目录

  • 每日编程一题刷之教你一招搞定螺旋矩阵(LeetCode)
            • 题目引入‍
            • 题目描述
            • summary‍
            • 结语

每日编程一题刷之轻松解决螺旋矩阵(Leetcode)_第1张图片

题目引入‍

这次我们引进两道leetcode上面的题目 大家不用害怕 我会给大家讲清楚 这些题目的,

59. 螺旋矩阵 II - 力扣(LeetCode) (leetcode-cn.com)

54. 螺旋矩阵 - 力扣(LeetCode) (leetcode-cn.com)

题目描述

每日编程一题刷之轻松解决螺旋矩阵(Leetcode)_第2张图片

题目中告诉我们的是 我们的要将一个数据 按照螺旋状态进行排序,这个其实是 不是很好想的,因为我们会在循环的时候,遇到很多问题,比如说 不知道具体的界限在哪里,会让我们很头疼,这个题目其实思路倒是很好想,我们遍历这个二维数组,然后在对应的位置进行赋值处理,看似好像说起来很简单,当我们真正去实现的时候,会发现,从左到右,从上到下,从右向左,从下向上的操作处理,但是似乎并不是那么的简单,因为我们难道只会循环这样的过程一次吗,每次循环我们要进行赋值的次数又是几次,这样一想,似乎并没有那么简单,

现在我给大家引入一个比较好的思路,就是我们每次赋值完一次 我们就告诉自己这一行与我们无关了,然后进行条件判断,

这里条件判断是说判断上下左右界的问题,什么意思那,其实就是我们 只要是删除完一行,我们就要-判断一次,

比如说 我们将第一行删除完,是不是要将进行赋值的数据移动到第二行,这个时候你想想 我们的上边界 是不可以大于下边界,一旦大于说明我们这个中间没有数据要进行赋值处理,这个就是我们评判的标准,下面代码

演示 里面有注释

大家看一下

class Solution {
public:
    vector> generateMatrix(int n) {
            vector> res(n, vector(n, 0));
            int count=1;
            int left=0;//左边界
            int right=n-1;//这里确定右边界
            int up=0;//上边界
            int down=n-1;//这里确定下边界
            while(true){
                 
                  for(int i=left;i<=right;++i){//
                      res[up][i]=count++;
                  }
                  if(++up>down){//如果上边界大于下边界 退出
                      break;
                  }
                  for(int i=up;i<=down;i++){
                      res[i][right]=count++;
                  }
                  if(--right=left;i--){
                      res[down][i]=count++;//这个循环体里面的是书写 一共是不变的 比如说 这里down是不变的 我们对右边进行循环
                  }
                  if(--down=up;i--){
                      res[i][left]=count++;
                  }
                  if(++left>right){
                      break;
                  }

            }
            return res; 
    }
};

这样一来 我们将判断我们数组直接还有没有数据作为我们循环的条件,使得思路更加明确 没删除一行 我们就去看看是不是不满足条件,

直到不满足我们结束 这样就结束

summary‍

首先设定上下左右边界
首先是向右移动到最右,此时第一行因为已经使用过了,可以将其从图中删去,在代码中就是重新定义上边界
判断若重新定义后,如果上下边界不是正常的大小关系,表明螺旋矩阵遍历结束,跳出循环,返回答案
若上下边界不交错(就是满足右边大于左边,下面大于上边),则遍历还未结束,接着向下向左向上移动,操作过程与第一,二步同理
不断循环以上步骤,直到某两条边界交错,跳出循环,返回我们的结果

结语

打卡完成 继续加油xdm

每日编程一题刷之轻松解决螺旋矩阵(Leetcode)_第3张图片

你可能感兴趣的:(leetcode,矩阵,算法)