站长工具ip地址,wordpress登陆改图标和连接,怎样有效的做网上宣传,济南商城网站建设多少钱LeetCode59.螺旋矩阵 1.问题描述2.解题思路3.代码 1.问题描述
给你一个正整数 n #xff0c;生成一个包含 1 到 n2 所有元素#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
示例 1#xff1a; 输入#xff1a;n 3
输出#xff1a;[[1,2,3],[8,9,… LeetCode59.螺旋矩阵 1.问题描述2.解题思路3.代码 1.问题描述
给你一个正整数 n 生成一个包含 1 到 n2 所有元素且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
示例 1 输入n 3
输出[[1,2,3],[8,9,4],[7,6,5]]示例 2
输入n 1
输出[[1]]提示
1 n 20
2.解题思路
模拟顺时针画矩阵的过程:
填充上行从左到右填充右列从上到下填充下行从右到左填充左列从下到上
我们要画每四条边这四条边怎么画每画一条边都要坚持一致的左闭右开或者左开右闭的原则这样这一圈才能按照统一的规则画下来。 3.代码
python
from typing import Listclass Solution:def generateMatrix(self, n: int) - List[List[int]]:nums [[0] * n for _ in range(n)]startx, starty 0, 0 # 起始点loop, mid n // 2, n // 2 # 迭代次数、n为奇数时矩阵的中心点count 1 # 计数for offset in range(1, loop 1): # 每循环一层偏移量加1偏移量从1开始for i in range(starty, n - offset): # 从左至右左闭右开nums[startx][i] countcount 1for i in range(startx, n - offset): # 从上至下nums[i][n - offset] countcount 1for i in range(n - offset, starty, -1): # 从右至左nums[n - offset][i] countcount 1for i in range(n - offset, startx, -1): # 从下至上nums[i][starty] countcount 1startx 1 # 更新起始点starty 1if n % 2 ! 0: # n为奇数时填充中心点nums[mid][mid] countreturn numssolution Solution()
result solution.generateMatrix(5) # 传入想要生成的矩阵的大小
for row in result:print(row)C
#include iostream
#include vectorusing namespace std;class Solution {public:vectorvectorint generateMatrix(int n) {vectorvectorint res(n, vectorint(n, 0)); // 使用vector定义一个二维数组int startx 0, starty 0; // 定义每循环一个圈的起始位置int loop n / 2; // 每个圈循环几次例如n为奇数3那么loop 1 只是循环一圈矩阵中间的值需要单独处理int mid n / 2; // 矩阵中间的位置例如n为3 中间的位置就是(11)n为5中间位置为(2, 2)int count 1; // 用来给矩阵中每一个空格赋值int offset 1; // 需要控制每一条边遍历的长度每次循环右边界收缩一位int i,j;while (loop --) {i startx;j starty;// 下面开始的四个for就是模拟转了一圈// 模拟填充上行从左到右(左闭右开)for (j starty; j n - offset; j) {res[startx][j] count;}// 模拟填充右列从上到下(左闭右开)for (i startx; i n - offset; i) {res[i][j] count;}// 模拟填充下行从右到左(左闭右开)for (; j starty; j--) {res[i][j] count;}// 模拟填充左列从下到上(左闭右开)for (; i startx; i--) {res[i][j] count;}// 第二圈开始的时候起始位置要各自加1 例如第一圈起始位置是(0, 0)第二圈起始位置是(1, 1)startx;starty;// offset 控制每一圈里每一条边遍历的长度offset 1;}// 如果n为奇数的话需要单独给矩阵最中间的位置赋值if (n % 2) {res[mid][mid] count;}return res;}
};int main() {Solution s;int n;cout Enter the value of n: ;cin n;vectorvectorint matrix s.generateMatrix(n);for (int i 0; i matrix.size(); i) {cout [;for (int j 0; j matrix[i].size(); j) {cout matrix[i][j];if (j ! matrix[i].size() - 1) {cout ,;}}cout ];if (i ! matrix.size() - 1) {cout ,;}cout endl;}return 0;
}