【Leetcode】59. 螺旋矩阵 II

作者: 码蹄疾 | 来源:发表于2018-09-03 21:04 被阅读2次

    题目

    给定一个正整数 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名企之路

    相关文章

      网友评论

        本文标题:【Leetcode】59. 螺旋矩阵 II

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