Leetcode 59. 螺旋打印矩阵

题目描述

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

示例 1:

输入:n = 3

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

示例 2:

输入:n = 1

输出:[[1]]

解题思路

此题相对上一题leetcode54更简单,因为边界更可控,是正方形,可以从外圈向中央逼近,重点是边界的处理,避免重复

代码实现

java 复制代码
class Solution {
    public int[][] generateMatrix(int n) {
        int[][] r = new int[n][n];
        int lr = 0, rr = n -1, sum = n* n;
        fill(r, lr, rr, 1, sum);
        return r;
    }

    private void fill(int[][] r, int lr, int rr, int n, int sum) {
       if(n > sum) return;
        if(lr > rr) return;
        for (int i = lr; i <= rr; i++) {
            r[lr][i] = n;
            n++;
        }
        for (int i = lr+1; i <= rr; i++) {
            r[i][rr] = n;
            n++;
        }
        for (int i = rr-1; i >= lr; i--) {
            r[rr][i] = n;
            n++;
        }
        for (int i = rr-1; i > lr; i--) {
            r[i][lr] = n;
            n++;
        }
        fill(r, lr+1, rr-1, n, sum);
    }
}
相关推荐
前进的李工6 分钟前
LeetCode hot100:094 二叉树的中序遍历:从递归到迭代的完整指南
python·算法·leetcode·链表·二叉树
麦麦大数据1 小时前
F049 知识图谱双算法推荐在线学习系统vue+flask+neo4j之BS架构开题论文全源码
学习·算法·知识图谱·推荐算法·开题报告·学习系统·计算机毕业设计展示
兩尛1 小时前
215. 数组中的第K个最大元素
数据结构·算法·排序算法
952361 小时前
数据结构-堆
java·数据结构·学习·算法
吃着火锅x唱着歌2 小时前
LeetCode 面试题 16.24.数对和
算法·leetcode·职场和发展
不会编程的小寒2 小时前
数据结构 2.0
数据结构·算法
专注VB编程开发20年2 小时前
图片转矢量图(提取轮廓线条)Potrace:一个基于多边形的位图轮廓矢量化算法(translation)
算法·图片转矢量
Dream it possible!2 小时前
LeetCode 面试经典 150_二叉树层次遍历_二叉树的层平均值(82_637_C++_简单)
c++·leetcode·面试·二叉树
小羊失眠啦.2 小时前
Rust核心库(core)深度解析:无依赖基石的设计与实践
数据库·算法·rust