算法记录
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);
}
}
总结
方法的模拟。