算法--数组专题(二)

59.螺旋矩阵

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

l
解决思路:
这题我是参考一篇文章,博主写的是真的很棒
文章链接
文章内用的是C++的写法,这里我用JS代码呈现一下:

var generateMatrix = function(n) {
    
    
    var arr = new Array()
    // 初始化二维数组
    for (let i = 0; i < n; i++) {
    
    
        arr[i] = new Array()
        for (let j = 0; j < n; j++) {
    
    
            arr[i][j] = 0
        }
    }
    var loop = Math.floor(n / 2)  // 定义需要循环多少圈,n = 3时,循环1圈,中间的值单独处理
    var mid = Math.floor(n / 2) // 矩阵的中间的位置,n = 3时,即为(1,1)
    var offset = 1 // 每一圈循环,需要控制遍历的长度
    var startx = 0 // 起始x坐标
    var starty = 0 // 起始y坐标
    var count = 1 // 用来表示数组每个位置的元素
    var m = 0
    var k = 0
    while (loop--) {
    
    
        // 下面的四个for循环即为遍历一圈
        // 模拟从左到右遍历
        for (k = starty; k < starty + n - offset; k++) {
    
    
            arr[startx][k] = count++
        }
        // 模拟从上到下遍历
        for (m = startx; m < startx + n - offset; m++) {
    
    
            arr[m][k] = count++ 
        }
        // 模拟低层从右到左遍历
        for (; k > starty; k--) {
    
    
            arr[m][k] = count++
        }
        // 模拟从下到上遍历
        for (; m > startx; m--) {
    
    
            arr[m][starty] = count++
        }
        startx++
        starty++
        offset += 2
    }
    if (n % 2 !== 0) {
    
    
        arr[mid][mid] = count
    }
    return arr
};

猜你喜欢

转载自blog.csdn.net/yldd_ldd/article/details/113846822