V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Acceml
V2EX  ›  程序员

[每天一题 Leetcode] 59. 螺旋矩阵 II

  •  
  •   Acceml ·
    Acceml · 2018-09-03 20:42:07 +08:00 · 1441 次点击
    这是一个创建于 2272 天前的主题,其中的信息可能已经有所发展或是发生改变。

    题目

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

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

    题解

    这个题目也比较简单, 和第 54 题类似: 这个题目很简单,上下左右分别用四个变量去标志:

    上:top

    下:bottom

    左:left

    右: right

    就按照四步走就可以:

    left -> right

    top -> bottom

    right -> left

    bottom -> top

    python

    class Solution:
        def generateMatrix(self, n):
            """
            :type n: int
            :rtype: List[List[int]]
            """
            matrix = [[0 for j in range(n)] for i in range(n)]
            top = 0
            bottom = n - 1
            left = 0
            right = n - 1
            count = 1
            while (True):
                for i in range(left, right + 1):
                    matrix[top][i] = count
                    count += 1
                top += 1
                if left > right or top > bottom:
                    break
                for i in range(top, bottom + 1):
                    matrix[i][right] = count
                    count += 1
                right -= 1
                if left > right or top > bottom:
                    break
                for j in range(left, right + 1)[::-1]:
                    matrix[bottom][j] = count
                    count += 1
                bottom -= 1
                if left > right or top > bottom:
                    break
                for i in range(top, bottom + 1)[::-1]:
                    matrix[i][left] = count
                    count += 1
                left += 1
                if left > right or top > bottom:
                    break
            return matrix
    

    java

    class Solution {
        public int[][] generateMatrix(int n) {
             int[][] matrix = new int[n][n];
            int top = 0;
            int bottom = matrix.length - 1;
            int left = 0;
            int right = matrix[0].length - 1;
            int count = 1;
            while (true) {
                for (int i = left; i <= right; i++) matrix[top][i] = count++;
                top++;
                if (left > right || top > bottom) break;
    
                for (int i = top; i <= bottom; i++) matrix[i][right] = count++;
                right--;
                if (left > right || top > bottom) break;
    
                for (int i = right; i >= left; i--) matrix[bottom][i] = count++;
                bottom--;
                if (left > right || top > bottom) break;
    
                for (int i = bottom; i >= top; i--) matrix[i][left] = count++;
                left++;
                if (left > right || top > bottom) break;
            }
    
            return matrix;
        }
    }
    

    文章汇总


    Leetcode 名企之路

    1 条回复    2018-09-04 09:22:12 +08:00
    ackfin01
        1
    ackfin01  
       2018-09-04 09:22:12 +08:00
    好了,我知道了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2813 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 13:12 · PVG 21:12 · LAX 05:12 · JFK 08:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.