zeus
2026-03-10
点 赞
0
热 度
11
评 论
1

leetcode热门代码题

  1. 首页
  2. leetcode热门代码题

leetcode是一个适合学习代码的网站,里面资源大多免费,很适合准备进入互联网行业的初学者进行基础知识的综合性学习,往往能在面试过程中帮助大部分求职者解决面试过程中遇到的手撕代码题。

链接如下:https://leetcode.com 里面可以切换为中国地区,仅需电话号码就可以注册登录,非常方便。

接下来介绍里面常见的一道热门题

屏幕截图 2026-03-10 162502.png

这道题的要求很简单,主要的思想就是模拟。我们可以将矩阵看成若干层,首先填入矩阵最外层的元素,其次填入矩阵次外层的元素,直到填入矩阵最内层的元素。

定义矩阵的第 k 层是到最近边界距离为 k 的所有顶点。

对于每层,从左上方开始以顺时针的顺序填入所有元素。假设当前层的左上角位于 (top,left),右下角位于 (bottom,right),按照如下顺序填入当前层的元素。

从左到右填入上侧元素,依次为 (top,left) 到 (top,right)。

从上到下填入右侧元素,依次为 (top+1,right) 到 (bottom,right)。

如果 left<right 且 top<bottom,则从右到左填入下侧元素,依次为 (bottom,right−1) 到 (bottom,left+1),以及从下到上填入左侧元素,依次为 (bottom,left) 到 (top+1,left)。

填完当前层的元素之后,将 left 和 top 分别增加 1,将 right 和 bottom 分别减少 1,进入下一层继续填入元素,直到填完所有元素为止。

(leetcode官方给出的题解思路)

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        int t=0,b=n-1;
        int l=0,r=n-1;
        vector<vector<int>> ans(n,vector<int>(n));
        int k=1;
        while(k<=n*n){
            for(int i=l;i<=r;++i,++k) ans[t][i]=k;
            ++t;
            for(int i=t;i<=b;++i,++k) ans[i][r]=k;
            --r;
            for(int i=r;i>=l;--i,++k) ans[b][i]=k;
            --b;
            for(int i=b;i>=t;--i,++k) ans[i][l]=k;
            ++l;
        }
        return ans;
    }
};

这种算法的时间复杂度为O(n2),空间复杂度为O(1)


用键盘敲击出的不只是字符,更是一段段生活的剪影、一个个心底的梦想。希望我的文字能像一束光,在您阅读的瞬间,照亮某个角落,带来一丝温暖与共鸣。

不具版权性
不具时效性

文章内容不具时效性。若文章内容有错误之处,请您批评指正。

目录

欢迎来到云游记

12 文章数
5 分类数
5 评论数
8标签数
最近评论
zeus

zeus


真的c

zeus

zeus


so easy

zeus

zeus


这文章真的招