美文网首页
每天一题LeetCode【第41天】

每天一题LeetCode【第41天】

作者: 草稿纸反面 | 来源:发表于2017-04-08 00:01 被阅读69次

    T59. Spiral Matrix II【Medium

    题目

    给一个整数 n,构造一个 1~n² 的螺旋排序的正方形矩阵。

    例如:

    当 n = 3 时,

    应该返回如下矩阵:

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

    思路

    这题和 leetcode 第 54 题解决方法几乎一样。

    (在我的 每天一题LeetCode【第39天】 有对第 54 题的分析)

    接下来说本题思路,首先还是拿出这张丑图 (*  ̄∇ ̄*):

    画圈圈时有三个要点:

    ① 画完一行(列),下次再到这行(列)时会画它的内圈

    ② 当画到最后,两线不能相交(就是下面的 boundriesCrossed 的作用)

    ③ 每画一个点都是前面的点的数字 + 1

    代码

    代码取自 Top Solution,稍作注释

     public int[][] generateMatrix(int n) {
            // 简历一个 n × n 的矩阵
            int[][] matrix = new int[n][n];
            // 若为 0 则直接返回
            if (n == 0) {
                return matrix;
            } 
            // 设置初始值
            int rowStart = 0;
            int rowEnd = n-1;
            int colStart = 0;
            int colEnd = n-1;
            int num = 1; //change
            //看有没有越界,有的话循环结束
            while (rowStart <= rowEnd && colStart <= colEnd) {
                // 画上面的那行
                for (int i = colStart; i <= colEnd; i ++) {
                    matrix[rowStart][i] = num ++; //change
                }
                //下一次内行
                rowStart ++;
                // 画最右边的列
                for (int i = rowStart; i <= rowEnd; i ++) {
                    matrix[i][colEnd] = num ++; //change
                }
                //下一次内列
                colEnd --;
                // 画最下边的列
                for (int i = colEnd; i >= colStart; i --) {
                    if (rowStart <= rowEnd)
                        matrix[rowEnd][i] = num ++; //change
                }
                //下一次内行
                rowEnd --;
                // 画最左边的列
                for (int i = rowEnd; i >= rowStart; i --) {
                    if (colStart <= colEnd)
                        matrix[i][colStart] = num ++; //change
                }
                //下一次内列
                colStart ++;
            }
            
            return matrix;
        }
    

    相关文章

      网友评论

          本文标题:每天一题LeetCode【第41天】

          本文链接:https://www.haomeiwen.com/subject/amikattx.html