LeetCode-螺旋矩阵 II

185 阅读1分钟

算法记录

LeetCode 题目:

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


说明

一、题目

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

二、分析

  • 题目本身不存在什么算法难点,只需要模拟矩阵的旋转就行了。
  • 题目可以分解为先把矩阵最外层的框填写完成,然后将填写过的外框删掉之后重复进行,直到没有框可以进行填充。
  • 这样一来问题就分解了,可以使用递归来完成。
class Solution {
    public int[][] generateMatrix(int n) {
        int[][] ret = new int[n][n];
        int count = 1;
        dfs(ret, 0, n, 0, n, count);
        return ret;
    }
    public void dfs(int[][] ret, int ls, int le, int rs, int re, int count) {
        if(ls >= le || rs >= re) return;
        for(int i = ls; i < le; i++) ret[rs][i] = count++;
        for(int i = rs + 1; i < re - 1; i++) ret[i][le - 1] = count++;
        for(int i = le - 1; i > ls; i--) ret[re - 1][i] = count++;
        for(int i = re - 1; i > rs; i--) ret[i][ls] = count++;
        dfs(ret, ls + 1, le - 1, rs + 1, re - 1, count);
    }
}

总结

方法的模拟。