59. Spiral Matrix II

Given a positive integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.

Example:

Input: 3
Output:
[
 [ 1, 2, 3 ],
 [ 8, 9, 4 ],
 [ 7, 6, 5 ]
]

题意:

蛇形填数

思路:

因为是从左上角顺时针开始填,所以设置top,left,down,right四个变量,开始遍历,直到left==right||down==top,注意循环过程中,四个变量的变化。

代码:

JavaScript代码:

/**
 * @param {number} n
 * @return {number[][]}
 */
var generateMatrix = function(n) {
    var number=[];
    for(var i=0;i<n;i++)
        number.push([]);
    var top=0,left=0,down=n-1,right=n-1,k=1;
    while(top<=down)
        {
            for(var i=left;i<=right;i++)
                number[top][i]=k++;
            top++;
            for(var i=top;i<=down;i++)
                number[i][right]=k++;
            right--;
            for(var i=right;i>=left;i--)
                number[down][i]=k++;
            down--;
            for(var i=down;i>=top;i--)
                number[i][left]=k++;
            left++;
        }
    return number;
};

Java代码:

class Solution {
    public int[][] generateMatrix(int n) {
        if(n==0)
            return null;
        int [][]spiral=new int[n][n];
        int k=0;
        int left=0,top=0,down=n-1,right=n-1;
        while(top<=down)
        {
            for(int i=left;i<=right;i++)
                spiral[top][i]=++k;
            top++;
            for(int j=top;j<=down;j++)
                spiral[j][right]=++k;
            right--;
            for(int i=right;i>=left;i--)
                spiral[down][i]=++k;
            down--;
            for(int j=down;j>=top;j--)
                spiral[j][left]=++k;
            left++;
        }
        return spiral;
    }
}


阅读更多

扫码向博主提问

bwcxljsm

非学,无以致疑;非问,无以广识
去开通我的Chat快问

没有更多推荐了,返回首页