leetcode做题笔记59

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

思路一:设置方向,每行每列按对应方向输入,最后返回

cpp 复制代码
int** generateMatrix(int n, int* returnSize, int** returnColumnSizes) {
    int maxNum = n * n;
    int curNum = 1;
    int** matrix = malloc(sizeof(int*) * n);
    *returnSize = n;
    *returnColumnSizes = malloc(sizeof(int) * n);
    for (int i = 0; i < n; i++) {
        matrix[i] = malloc(sizeof(int) * n);
        memset(matrix[i], 0, sizeof(int) * n);
        (*returnColumnSizes)[i] = n;
    }
    int row = 0, column = 0;
    int directions[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};  
    int directionIndex = 0;
    while (curNum <= maxNum) {
        matrix[row][column] = curNum;
        curNum++;
        int nextRow = row + directions[directionIndex][0], nextColumn = column + directions[directionIndex][1];
        if (nextRow < 0 || nextRow >= n || nextColumn < 0 || nextColumn >= n || matrix[nextRow][nextColumn] != 0) {
            directionIndex = (directionIndex + 1) % 4;  
        }
        row += directions[directionIndex][0];
        column += directions[directionIndex][1];
    }
    return matrix;
}

时间复杂度O(n),空间复杂度O(n^2)

分析:

本题要按顺时针顺序排列数组后输出,可设置对应的方向数组,将递增的数通过方向数组放置到正确的位置,最后输出数组即可

总结:

本题考察对数组的应用,想到用方向确定数位置即可解决本题

相关推荐
墨️穹4 分钟前
DAY5, 使用read 和 write 实现链表保存到文件,以及从文件加载数据到链表中的功能
算法
Erik_LinX6 分钟前
day1-->day7| 机器学习(吴恩达)学习笔记
笔记·学习·机器学习
魔理沙偷走了BUG8 分钟前
【Linux笔记】Day5
linux·笔记
sz66cm15 分钟前
算法基础 -- Trie压缩树原理
算法
索然无味io22 分钟前
组件框架漏洞
前端·笔记·学习·安全·web安全·网络安全·前端框架
Java与Android技术栈23 分钟前
图像编辑器 Monica 之 CV 常见算法的快速调参
算法
别NULL36 分钟前
机试题——最小矩阵宽度
c++·算法·矩阵
珊瑚里的鱼36 分钟前
【单链表算法实战】解锁数据结构核心谜题——环形链表
数据结构·学习·程序人生·算法·leetcode·链表·visual studio
无限码力40 分钟前
[矩阵扩散]
数据结构·算法·华为od·笔试真题·华为od e卷真题
gentle_ice41 分钟前
leetcode——矩阵置零(java)
java·算法·leetcode·矩阵