`

Leetcode - Spiral Matrix II

 
阅读更多
Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.

For example,
Given n = 3,

You should return the following matrix:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]

[分析]
实现2参考https://leetcode.com/discuss/14079/my-super-simple-solution-can-used-for-both-spiral-matrix-and,代码更简洁。

public class Solution {
    // Method 1
    public int[][] generateMatrix1(int n) {
        if (n < 0) return null;
        int[][] board = new int[n][n];
        int rowStart = 0, colStart = 0;
        int radius = n;
        int num = 1;
        while (radius > 0) {
            int i = rowStart, j = colStart;
            // move right
            int upRight = colStart + radius;
            while (j < upRight) {
                board[i][j++] = num++;
            }
            j--;
            if (radius == 1) break;
            // move down
            i++;
            int downRight = rowStart + radius;
            while (i < downRight) {
                board[i++][j] = num++;
            }
            i--;
            // move left
            j--;
            while (j >= colStart) {
                board[i][j--] = num;
                num++;
            }
            j++;
            // move up
            --i;
            while (i > rowStart) {
                board[i--][j] = num;
                num++;
            }
            // update info to start next spiral
            rowStart++; colStart++;
            radius -= 2;
        }
        return board;
    }
    // Method 2
    public int[][] generateMatrix(int n) {
        if (n < 0) return null;
        int[][] matrix = new int[n][n];
        int rowStart = 0, rowEnd = n - 1;
        int colStart = 0, colEnd = n - 1;
        int num = 1;
        while (rowStart <= rowEnd) {
            for (int j = colStart; j <= colEnd; j++) {//move right
                matrix[rowStart][j] = num++;
            }
            rowStart++;
            for (int i = rowStart; i <= rowEnd; i++) {//move down
                matrix[i][colEnd] = num++;
            }
            colEnd--;
            if (rowEnd >= rowStart) {
                for (int j = colEnd; j >= colStart; j--) {//move left
                    matrix[rowEnd][j] = num++;
                }
                rowEnd--;
            }
            if (colEnd >= colStart) {
                for (int i = rowEnd; i >= rowStart; i--) {//move up
                    matrix[i][colStart] = num++;                    
                }
                colStart++;
            }
        }
        return matrix;
    }
}
分享到:
评论

相关推荐

    js-leetcode题解之59-spiral-matrix-II.js

    js js_leetcode题解之59-spiral-matrix-II.js

    C语言-leetcode题解之59-spiral-matrix-ii.c

    c语言入门 C语言_leetcode题解之59-spiral-matrix-ii.c

    js-leetcode题解之54-spiral-matrix.js

    js js_leetcode题解之54-spiral-matrix.js

    C语言-leetcode题解之54-spiral-matrix.c

    c是最好的编程语言 C语言_leetcode题解之54-spiral-matrix.c

    _leetcode-python.pdf

    - Spiral Matrix: 给定一个m×n矩阵,以螺旋方式遍历矩阵中的所有元素一次,并且只遍历一次。 - Merge Intervals: 给定一组区间,请合并所有重叠的区间。 - Insert Interval: 在一组已经排序的区间中,插入一个新的...

    LeetCode-Hot-100

    "Spiral Matrix"则需要理解矩阵旋转的数学原理。 5. **递归与函数**:递归是解决许多算法问题的有效手段,如"Binary Tree Level Order Traversal"使用层次遍历(广度优先搜索)求解。而"Factorial Trailing Zeroes...

    leetcode答案-leetcode-java:leetcode的Java代码

    Spiral Matrix com.leetcode.list Linked List Cycle Linked List Cycle II Remove Duplicates from Sorted List com.leetcode.string Single Number com.leetcode.tree Balanced Binary Tree Maximum Depth of ...

    多线程leetcode-leetcode-java:leetcode上的题解,基于java语言

    多线程 leetcode 前言 ...Spiral Matrix Path Sum II Copy List with Random Pointer Building H2O Fizz Buzz Multithreaded hard Merge k Sorted Lists Reverse Nodes in k-Group Trapping Rain Water

    javalruleetcode-Leetcode-Solutions:为了去头条而刷题

    leetcode LeetCode Solutions 算法 - Algorithms 排序算法:快速排序、归并排序、计数排序 搜索算法:回溯、递归、剪枝技巧 图论:最短路、最小生成树、网络流建模 动态规划:背包问题、最长子序列、计数问题 基础...

    leetcode答案-Spiral-Matrix:返回二维数组中整数元素的顺时针螺旋列表

    leetcode 答案螺旋矩阵 返回二维数组中整数元素的顺时针螺旋列表 [答案击败 100% Java LeetCode 运行时提交] [答案击败 100% Java LeetCode 内存使用提交] 大(O)= O(N)

    戳气球leetcode-leetcode:leetcode

    leetcode category other hot keywords:Palindrome(mic), Subsequence Array 螺旋矩阵Spiral Matrix 顺时针打印矩阵 Next Permutation Product of Array Except Self 189.rotate-array 283.move-zero Range Sum ...

    SpiralMatrixII-Leetcode-59

    其中,问题59,名为"Spiral Matrix II"(螺旋矩阵II),是中级难度的一个挑战,主要考察的是矩阵遍历的技巧。该问题的核心目标是生成一个给定大小的螺旋矩阵,从中心开始,以螺旋形状填充数字。 首先,让我们明确...

    leetcode2sumc-Leetcode-2020:刷刷Leetcode并作纪录

    Spiral Matrix medium O 66 Plus One easy O O 118 Pascal's Triangle easy O O 119 Pascal's Triangle II easy O 要满足只用一个array大小空间O(k) k为input大小来完成,须具备backtracking概念 151 Reverse Words ...

    LeetCode最全代码

    137 | [Single Number II](https://leetcode.com/problems/single-number-ii/) | [C++](./C++/single-number-ii.cpp) [Python](./Python/single-number-ii.py) | _O(n)_ | _O(1)_ | Medium ||| 190 | [Reverse Bits]...

    leetcode338-leetcode_cpp:leetcode的C++代码

    第 338 章leetcode_cpp leetcode 的 C++ 代码 包含的问题 1 两和容易2 加两个数中5 最长回文子串中6 ZigZag 转换介质7 反转整数简单8 ...II ...Spiral Matrix II 培养基61 轮播列表中第62话第63话64 最小路径和中66

    c++-c++编程基础之leetcode题解第59题螺旋矩阵II.zip

    第59题"螺旋矩阵II"(Spiral Matrix II)是LeetCode中的一个经典问题,它涉及到矩阵操作和迭代。在这个问题中,我们需要生成一个特定大小的螺旋矩阵,从中心向外螺旋式填充数字。 螺旋矩阵是一种特殊的二维数组,其...

    leetcode530-Leetcode:新的开始

    leetcode 530 力码 全部的: 易(173/237+x) 中(144/437+x) 硬(4/x) 问题 1.Two Sum(dict) 7.(跳过)(数学) 9.(跳过)(串串技巧) 11.盛水最多的容器 12.(跳过)(问题不好) 13.(跳过)(蛮力) 14.(跳过)...

    python-leetcode面试题解之第54题螺旋矩阵-题解.zip

    标题中的“python-leetcode面试题解之第54题螺旋矩阵-题解.zip”表明这是一个关于Python编程语言的LeetCode面试题解答,具体是针对第54题——螺旋矩阵(Spiral Matrix)的解题代码和分析。LeetCode是一个在线平台,...

    php-leetcode题解之二维数组回形排序打印.zip

    function spiralOrder($matrix) { if (empty($matrix)) return []; $result = []; $left = 0; $right = count($matrix[0]) - 1; $top = 0; $bottom = count($matrix) - 1; while ($left $right && $top $...

    c++-c++编程基础之leetcode题解第54螺旋矩阵.zip

    在本压缩包中,主题聚焦于C++编程基础与LeetCode题目的结合,特别是针对第54题“螺旋矩阵”(Spiral Matrix)的解法。LeetCode是一个在线平台,提供了一系列编程挑战,旨在帮助程序员提升算法技能和解决实际问题的...

Global site tag (gtag.js) - Google Analytics