【数据结构与算法系列5】螺旋矩阵II (C++ & Python)

这篇具有很好参考价值的文章主要介绍了【数据结构与算法系列5】螺旋矩阵II (C++ & Python)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

示例 1:

【数据结构与算法系列5】螺旋矩阵II (C++ & Python),数据结构与算法,C++,矩阵,算法,线性代数,数据结构

输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]

示例 2:

输入:n = 1
输出:[[1]]

提示:

  • 1 <= n <= 20
  • 使用和二分法一样的思想,确定循环不变量,确定是左闭右开,还是左闭右闭合,本次使用的是左闭右开

C++实现:

#include "array_algorithm.h"

vector<vector<int>> generateMatrix(int n) {
    int loop_num = n / 2; // 螺旋循环的圈数
    int start_x = 0; // 矩阵行的起始位置 
    int start_y = 0; // 矩阵列的起始位置
    int offset = 1; // 选用左开右闭原则,偏移
    int count = 1; // 赋值参数
    vector<vector<int>> nums(n, vector<int>(n, 0)); // 构建二维数组,全赋值为0
    int i;
    int j;
    while (loop_num--)
    {
        i = start_x;
        j = start_y;

        for (j = start_y; j < n - offset; j++) {
            nums[start_y][j] = count++;
        }
        for (i = start_x; i < n - offset; i++) {
            nums[i][j] = count++;
        }
        for (; j > start_y; j--) {
            nums[i][j] = count++;
        }
        for (; i > start_x; i--) {
            nums[i][j] = count++;
        }

        start_x++;
        start_y++;

        offset += 1;
    }
    if (n % 2 == 1) {
        nums[n / 2][n / 2] = count;
    }
    return nums;
}

【数据结构与算法系列5】螺旋矩阵II (C++ & Python),数据结构与算法,C++,矩阵,算法,线性代数,数据结构

python实现:

def generateMatrix(n: int):
    loop_nums = int(n // 2)
    start_x = 0
    start_y = 0
    offset = 1
    count = 1
    # nums = np.random.randint(low=0, high=1, size=(n , n))
    nums = [[0] * n for _ in range(n)]
    for _ in range(loop_nums):
        for i in range(start_y, n - offset):
            nums[start_x][i] = count
            count += 1
        for i in range(start_x, n - offset):
            nums[i][n - offset] = count
            count += 1
        for i in range(n - offset, start_y, -1):
            nums[n - offset][i] = count
            count += 1
        for i in range(n - offset, start_x, -1):
            nums[i][start_y] = count
            count += 1
        start_x += 1
        start_y += 1
        offset += 1
    if n % 2 == 1:
        nums[n//2][n//2] = count
    return nums

【数据结构与算法系列5】螺旋矩阵II (C++ & Python),数据结构与算法,C++,矩阵,算法,线性代数,数据结构文章来源地址https://www.toymoban.com/news/detail-701103.html

到了这里,关于【数据结构与算法系列5】螺旋矩阵II (C++ & Python)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 算法-有序数组的平方,长度最小的子数组,螺旋矩阵II

    伪装成一个老手! 题目 给你一个按 非递减顺序 排序的整数数组 nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。 示例 : 输入:nums = [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释:平方后,数组变为 [16,1,0,9,100] 排序后,数组变为 [0,1,9,16,100] 来源:力扣977 思路 遍

    2024年02月11日
    浏览(43)
  • 数据结构第七周 :(稀疏矩阵快速转置 + 简单文本编辑器 + 三元组的矩阵加法 + 九宫格数独游戏 + 数组主元素 + 螺旋数字矩阵 + 蛇形矩阵)

    【问题描述】 稀疏矩阵的存储不宜用二维数组存储每个元素,那样的话会浪费很多的存储空间。所以可以使用一个一维数组存储其中的非零元素。这个一维数组的元素类型是一个三元组,由非零元素在该稀疏矩阵中的位置(行号和列号对)以及该元组的值构成。而矩阵转置就

    2023年04月21日
    浏览(43)
  • 【Python数据结构与算法】—— 搜索算法 | 期末复习不挂科系列

    ​ 🌈个人主页:  Aileen_0v0 🔥系列专栏:  数据结构与算法 💫个人格言: \\\"没有罗马,那就自己创造罗马~\\\" 这篇博客主要探索的是计算机科学常见问题---搜索算法 “时间紧,任务重!” 话不多说,开始今天的学习之旅吧⛵~ 目录 搜索 定义 -in 顺序搜索  无序表的顺序搜索

    2024年02月05日
    浏览(56)
  • 【Python数据结构与算法】——(线性结构)精选好题分享,不挂科必看系列

    🌈个人主页:  Aileen_0v0 🔥系列专栏:Python数据结构与算法专栏 💫个人格言: \\\"没有罗马,那就自己创造罗马~\\\" 1.time complexity of algorithm A is O(n^3) while algorithm B is O(2^n). Which of the following statement is TRUE?  A.For any problem in any scale, the alogorithm A is more efficient than alogrithm B. B.For any problem

    2024年02月05日
    浏览(45)
  • 【算法与数据结构】63、LeetCode不同路径 II

    所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。    思路分析 :参考【算法与数据结构】62、LeetCode不同路径的题目,可以发现本题仅仅是多了障碍物。我们还是用动态规划来做。有障碍物的地方无法到达,因此路径数量为0,只需要将障碍物位

    2024年02月02日
    浏览(57)
  • 【算法与数据结构】518、LeetCode零钱兑换 II

    所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。    思路分析 :本题的硬币是无数的,因此本题可以抽象成一个完全背包问题。完全背包和01背包的不同之处在于完全背包式从前往后遍历的。在本题的完全背包问题中,amount代表背包的最大重量

    2024年01月23日
    浏览(43)
  • 算法训练 Day 2 | 数组:977.有序数组的平方,209.长度最小的子数组,59.螺旋矩阵II

    977. 有序数组的平方 第一想法:暴力破解 看完题解想法:朝着双指针方向想 遇到困难: 用双指针的话,一开始想到两边指针往中间靠,逐个将最大值赋给结果数组。和题解不同的是,循环条件我写了  while (left != right) {...} ,相比于题解的  while (left = right) {...} ,我需要在后

    2023年04月12日
    浏览(47)
  • 【算法与数据结构】1049、LeetCode 最后一块石头的重量 II

    所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。    思路分析 :本题需要得到石头之间两两粉碎之后的最小值,那么一个简单的思路就是将这堆石头划分成大小相近的两小堆石头,然后粉碎,这样得到的结果必然是最优值。那么如何划分呢?我

    2024年01月21日
    浏览(47)
  • java数据结构与算法刷题-----LeetCode667. 优美的排列 II

    java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完): https://blog.csdn.net/grd_java/article/details/123063846 解题思路 题目要求我们返回一个数组长度为n的数组,必须含有1~n的所有数,并且从左到右,相邻的元素依次相减,它们的差,必

    2024年01月25日
    浏览(52)
  • 【算法集训】基础数据结构:十、矩阵

    矩阵其实就是二维数组,这些题目在9日集训中已经做过,这里做的方法大致相同。

    2024年02月04日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包