【leetcode】59. 螺旋矩阵 II(spiral-matrix-ii)(模拟)[中等]

2023-05-16

链接

https://leetcode-cn.com/problems/spiral-matrix-ii/

耗时

解题:7 min
题解:11 min

题意

给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。

提示:

  • 1 <= n <= 20

思路

和 【leetcode】54. 螺旋矩阵(spiral-matrix)(模拟)[中等] 的思路完全相同,两题的区别基本只有把 54 的输入变成的输出,然后矩阵还简化成了方阵,更简单了,在 54 的代码基础上改改就可以了。

设置一个变量从 1 加到 n 2 n^2 n2。对于这个变量来说:

从外向内一圈一圈往里走,把每一圈看成一个循环结,一圈包括 上、右、下、左 四个部分,分别遍历赋值,需要注意的是当只有一行或一列时,需要特殊判断一下只遍历 上 或 右 就可以了,再多遍历,位置平行的部分就重复了。还有第一部分要遍历整个一行,否则的话只有一个元素时就不会遍历它。

时间复杂度: O ( n 2 ) O(n^2) O(n2)

AC代码

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> matrix(n, vector<int>(n, 0));
        int cnt = (n+1)/2;
        int num = 0;
        for(int i = 0; i < cnt; ++i) {
            for(int j = i; j <= n-i-1; ++j) {
                matrix[i][j] = ++num;
            }
            for(int j = i+1; j <= n-i-1; ++j) {
                matrix[j][n-i-1] = ++num;
            }
            if(n-2*i > 1) {
                for(int j = n-i-2; j >= i; --j) {
                    matrix[n-i-1][j] = ++num;
                }
                for(int j = n-i-2; j > i; --j) {
                    matrix[j][i] = ++num;
                }
            }
        }
        return matrix;
    }
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【leetcode】59. 螺旋矩阵 II(spiral-matrix-ii)(模拟)[中等] 的相关文章

  • 如何生成行和列不重复的随机矩阵?

    如何生成具有特定范围的行和列中不重复的随机矩阵 示例 3x3 范围 1 到 3 2 1 3 3 2 1 1 3 2 示例 4x4 范围 1 到 4 4 1 3 2 1 3 2 4 3 2 4 1 2 4 1 3 解决这个问题的一种方法是生成
  • Matlab cellfun 上的函数 strfind

    我想用cellfun功能于strfind函数在另一个字符串元胞数组中查找字符串元胞数组中每个字符串的索引 以将它们排除在外 strings aaa bbb ccc ddd eee fff ggg hhh iii jjj excludedSt
  • SSE,行主要与列主要性能问题

    出于个人和娱乐目的 我正在使用 SSE 4 1 编写一个 geom 库 我花了最后 12 个小时试图理解处理行主要与列主要存储矩阵时的性能问题 我知道 Dirext OpenGL 矩阵是以行主顺序存储的 因此对我来说 将矩阵按行主顺序存储会
  • 将 3D 矩阵与 2D 矩阵相乘

    假设我有一个AxBxC matrix X and a BxD matrix Y 是否有一种非循环方法可以将每个C AxB矩阵与Y 作为个人喜好 我希望我的代码尽可能简洁和可读 这是我会做的 尽管它不符合您的 无循环 要求 for m 1 C
  • Android 屏幕坐标到画布视图坐标

    我正在尝试将屏幕 x 和 y 坐标转换为用于在屏幕上绘制的坐标 因此 我从触摸侦听器触发的 MotionEvent 获取屏幕 X 和 Y 坐标 我认为它应该像将它们乘以用于在画布上绘制的矩阵一样简单 所以我在创建视图时创建了 Matrix
  • 将 OpenCV 的 findHomography 透视矩阵转换为 iOS 的 CATransform3D

    我想获取从 OpenCV 返回的透视变换矩阵findHomography http docs opencv org modules calib3d doc camera calibration and 3d reconstruction h
  • 在 R 中将因子矩阵转换为二进制(指标)矩阵的最有效方法

    我可以想到几种方法来转换这种类型的矩阵 数据框 dat data frame x1 rep c a b 100 x2 rep c x y 100 head dat x1 x2 1 a x 2 b y 3 a x 4 b y 5 a x 6
  • 如何在 MATLAB 中调整矩阵大小?

    假设我有一个1 by 12矩阵 我想将其调整为4 by 3矩阵 我怎么能这样做呢 我当前的解决方案有点丑陋 for n 1 length mat 3 out n 1 3 mat n 1 3 1 n 1 3 3 end 有一个更好的方法吗 r
  • matlab中的分箱

    我一直无法在 matlab 或 Octave 中找到函数来完成我想要的操作 我有一个两列的矩阵 m x 和 y 值 我知道我可以通过执行 m 1 或 m 2 来提取列 我想将其分成 可能 大小相等的较小矩阵 并绘制这些矩阵的平均值 换句话说
  • 从矩阵中删除零行(优雅的方式)

    我有一个包含一些零行的矩阵 我想删除零行 矩阵是Nx3 我所做的很简单 我创造std vector其中每三个元素代表一行 然后我将其转换为Eigen MatrixXd 有没有一种优雅的方法来删除零行 include
  • 使用 Numpy 生成行和列之和为 1 的随机二进制矩阵

    我想生成一个随机数n x n使用 NumPy 的二进制矩阵 其中 每个值都是0 or 1 每行总计为1 每列总计为1 例如 一个有效的矩阵可能是 1 0 0 0 0 1 0 1 0 而无效的是 1 0 0 0 0 1 0 0 1 我尝试执行
  • 独特的柱组合

    这是我的简化数据集 foo lt data frame var1 c 1 10 var2 rep 1 5 2 var3 rep 1 2 5 var4 rep 3 7 2 总共 20 个变量 foo var1 var2 var3 var4 v
  • 获取矩阵条目的排名?

    假设一个矩阵 gt a lt matrix c 100 90 80 20 2 2 gt a 1 2 1 100 80 2 90 20 假设我想将矩阵的元素转换为等级 gt rank a lt rank a gt rank a 1 4 3 2
  • 在螺旋线上画等距点

    我需要一种算法来计算螺旋路径上的点的分布 该算法的输入参数应为 环路宽度 距最内环路的距离 点之间的距离固定 绘制点数 要绘制的螺旋是阿基米德螺线并且获得的积分必须是等距离来自彼此 该算法应该打印出单点的笛卡尔坐标序列 例如 点 1 0 0
  • 从 Julia 中的文本文件读取数据矩阵

    我有一个包含矩阵的文本文件 我想在朱莉娅中将其作为矩阵来阅读 文本文件如下 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 1 1 0 在 matlab 中 您可以执行以下操作来创建矩阵M
  • matlab矩阵中求子矩阵的通用方法

    我正在寻找一种 好 方法来在更大的矩阵 任意维数 中找到矩阵 模式 Example total rand 3 4 5 sub total 2 3 1 3 3 4 现在我希望这样的事情发生 loc matrixFind total sub 在
  • R 忽略空值的矩阵列的成对比较

    我有一个数组 我想获取它之间的相似度的度量values在每一列中 我的意思是我希望比较数组的成对列之间的行 并在它们的值匹配时增加一个度量 对于两列来说 所得的测量值最大值将完全相同 本质上我的问题与这里讨论的相同 R 两两比较矩阵中的所有
  • 使用 SqlBulkCopy 和 F# 在 SQL 中导出矩阵

    我想将大量数据从 F 传输到 SQL 表 基本上我的 F 代码创建了一个三列矩阵 UserID ProductID and price 和N行 我想将其 复制 粘贴 到数据库中 我尝试了多种选择 但最终 从 F 传输数据非常慢 10000
  • 在Matlab中对字符进行分组并形成矩阵

    我有 26 个字符 A 到 Z 我将 4 个字符组合在一起 并用空格分隔以下 4 个字符 如下所示 abcd efgh ijkl mnop qrst uvwx yz 我的Matlab编码如下 str abcdefghijklmnopqrst
  • 根据 SSRS 矩阵中的总列计算总列的百分比

    希望在我的 SSRS 矩阵中添加一列 这将为我提供该行中总列的百分比 我正在使用以下表达式 但百分比始终为 100 我假设这是因为总计是最后评估的 所以它只是执行总计 总计 FORMAT Fields ID Value SUM Fields

随机推荐