首页 > 其他分享 >59.螺旋矩阵

59.螺旋矩阵

时间:2024-10-30 20:31:53浏览次数:1  
标签:count 59 螺旋 ++ res 矩阵 -- int vector

题目

自己写的:

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> res(n, vector<int>(n, 0));
        res[0][0] = 1;
        int k = 0;
        while (n - 2 * k > 0)
        {
            int i = k, j = k;
            if (k != 0)
                res[i][j] =res[i][ j - 1] + 1;
            for ( ++ j; j < n - k; ++ j) res[i][j] = res[i][j - 1] + 1;
            j -- ;
            for ( ++ i; i < n - k; ++ i) res[i][j] = res[i - 1][j] + 1;
            i -- ;
            for ( -- j; j >= k; -- j) res[i][j] = res[i][j + 1] + 1;
            j ++ ;
            for ( -- i; i > k; -- i) res[i][j] = res[i + 1][j] + 1;
            k ++ ;
        }
        return res;
    }
};

自己写的时候感觉条理并没有那么清晰,主要还是没搞清楚循环不变量原则,这里我写的代码的循环不变量可能就是对每个圈的处理不变,然后每次手动指定要循环的这个圈的起点。

看了卡哥的视频,条理清晰多了,再反思自己的:

自己似乎对每条边是左开右闭处理,然后在第四条边(即向上走的那条边)的处理过程中就又不满足了左开右闭处理(因为最上面的那个点(即每个圈的起点)我已经手动指定了值),所以这就有一个矛盾点在了。

然后卡哥采取的是左闭右开处理,这样就完美让每条边得到相同的处理,而且不用对最上面的那个点进行手动处理。

不过看了卡哥的代码,我觉得还能对自己写的代码优化下,即引入一个变量count,用它来对vector赋值:

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> res(n, vector<int>(n, 0));
        int count = 1;
        int k = 0;
        while (n - 2 * k > 0)
        {
            int i = k, j = k;
            for (; j < n - k; ++ j) res[i][j] = count ++ ;
            j -- ;
            for ( ++ i; i < n - k; ++ i) res[i][j] = count ++ ;
            i -- ;
            for ( -- j; j >= k; -- j) res[i][j] = count ++ ;
            j ++ ;
            for ( -- i; i > k; -- i) res[i][j] = count ++ ;
            k ++ ;
        }
        return res;
    }
};

其实还有优化的地方,比如若n为奇数的时候,不用再进入while循环,而是直接在while循坏外就给它处理掉了,因为当n为奇数的时候,最后一圈一定是只给一个位置赋值。

标签:count,59,螺旋,++,res,矩阵,--,int,vector
From: https://www.cnblogs.com/hisun9/p/18516553

相关文章

  • YC359D [ 20241029 CQYC NOIP 模拟赛 T4 ] 平方(square)
    题意与P9994相同。模数改为\(998244353\)。Sol有点魔怔了。注意到我们代码中存在:if(siz[x]<=bsk){for(autok:idx[x]){isl[sy[k]]-=val[k];val[k]=1ll*val[k]*val[k]%mod;isl[sy[k]]+=val[k];}}这段内层会......
  • 【叶片单元动量理论】分析给定螺旋桨几何形状在不同前进比下恒定转速下的性能研究(Matl
      ......
  • markdown矩阵分块和latex中矩阵分块记录
    1.markdown中常见的符号附件\hat{X}\widehat{X}\check{X}\breve{X}\tilde{X}\dot{X}\ddot{X}\overline{X}\underline{X}2.markdown中矩阵由\left[ right],\begin{array}{ccc}\end{array}包围,分行由\\实现,分列通过ccc固定列数,列与列间用&分割代码:\left[\begin......
  • 变截面梁刚度矩阵
    以下是一个简化的示例,展示了如何定义一个变截面梁的类,并计算其刚度矩阵。请注意,这个示例仅用于说明概念,实际应用中可能需要更复杂的数学模型和计算。importnumpyasnpclassVariableSectionBeam:def__init__(self,E,I1,I2,A1,A2,L):"""初始化......
  • Leetcode73. 矩阵置零
    问题描述:给定一个 mxn的矩阵,如果一个元素为0,则将其所在行和列的所有元素都设为0。请使用原地算法。示例1:输入:matrix=[[1,1,1],[1,0,1],[1,1,1]]输出:[[1,0,1],[0,0,0],[1,0,1]]示例2:输入:matrix=[[0,1,2,0],[3,4,5,2],[1,3,1,5]]输出:[[0,0,0,0],[0,......
  • 三维变换矩阵知识点
    一、行矩阵与列矩阵、行主序与列主序行主序和列主序影响如何在内存中访问和存储矩阵数据,与行矩阵和列矩阵的概念没有直接的关系行矩阵与列矩阵:行矩阵:        $$\begin{pmatrix}a_{11}&a_{12}\\a_{21}&a_{22}\end{pmatrix}$$列矩阵:指的是矩阵的元......
  • 不做行变换证明矩阵的行秩等于列秩
    设\(A\inM_{m\timesn}(\mathbbF)\),令\(r=\dimR(A),s=\dimC(A)\).不妨设\(A\)的基行为前\(r\)行,令\(\tilde{A}\)为截取\(A\)的前\(r\)行所得矩阵,令\(t=\dimC(\tilde{A})\),不妨设\(\tilde{A}\)的基列为前\(t\)列.任取\(1\lek\len\),则存在\(\l......
  • 算法的学习笔记—滑动窗口的最大值(牛客JZ59)
    ......
  • 外贸矩阵运营深陷困境?一招让你绝处逢生
    在当今全球化的商业环境中,外贸矩阵运营逐渐成为企业拓展海外市场、提升品牌影响力的重要策略。然而,这一过程并非一帆风顺,存在着诸多难点,同时也蕴含着显著的优势。外贸矩阵运营的难点首先体现在多维度的复杂性上。账号矩阵需要精心管理众多不同平台的账号,每个账号都有其独特......
  • 多账号矩阵运营管理难题,只要一招搞定!
    在全球贸易竞争日益激烈的当下,越来越多的外贸企业纷纷转向矩阵运营。这是为何呢?首先,TK矩阵运营能极大地拓展品牌影响力。使用壹起航TK外贸矩阵通之后,在多个平台建立多个账号,企业可以针对不同市场和受众,全方位展示自身优势,吸引更广泛的潜在客户。例如,一家外贸工厂可在不同平台......