文章目录
59. 螺旋矩阵 II:
给你一个正整数
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
分析:
- 面对这道算法题目,二当家的陷入了沉思。
- 可以每次循环移动一步,判断移到边界就变换方向。
- 也可以每次循环都换完4次方向,也就是完成一次顺时针,然后缩圈。
- 和 54. 螺旋矩阵 非常类似。
题解:
rust:
implSolution{pubfngenerate_matrix(n:i32)->Vec<Vec<i32>>{letmut ans =vec![vec![0; n asusize]; n asusize];letmut num =0;let(mut left,mut right,mut top,mut bottom)=(0, n asusize-1,0, n asusize-1);while left <= right && top <= bottom {(left..right +1).for_each(|column|{
num +=1;
ans[top][column]= num;});(top +1..bottom +1).for_each(|row|{
num +=1;
ans[row][right]= num;});if left < right && top < bottom {(left..right).rev().for_each(|column|{
num +=1;
ans[bottom][column]= num;});(top +1..bottom).rev().for_each(|row|{
num +=1;
ans[row][left]= num;});}if right ==0|| bottom ==0{break;}
left +=1;
right -=1;
top +=1;
bottom -=1;}return ans;}}
go:
funcgenerateMatrix(n int)[][]int{
ans :=make([][]int, n)for i :=range ans {
ans[i]=make([]int, n)}
num :=0
left, right, top, bottom :=0, n-1,0, n-1for left <= right && top <= bottom {for column := left; column <= right; column++{
num++
ans[top][column]= num
}for row := top +1; row <= bottom; row++{
num++
ans[row][right]= num
}if left < right && top < bottom {for column := right -1; column >= left; column--{
num++
ans[bottom][column]= num
}for row := bottom -1; row > top; row--{
num++
ans[row][left]= num
}}
left++
right--
top++
bottom--}return ans
}
c++:
classSolution{public:
vector<vector<int>>generateMatrix(int n){
vector<vector<int>>ans(n,vector<int>(n));int num =0;int left =0, right = n -1, top =0, bottom = n -1;while(left <= right && top <= bottom){for(int column = left; column <= right;++column){
ans[top][column]=++num;}for(int row = top +1; row <= bottom;++row){
ans[row][right]=++num;}if(left < right && top < bottom){for(int column = right -1; column >= left;--column){
ans[bottom][column]=++num;}for(int row = bottom -1; row > top;--row){
ans[row][left]=++num;}}++left;--right;++top;--bottom;}return ans;}};
python:
classSolution:defgenerateMatrix(self, n:int)-> List[List[int]]:
ans =[[0]* n for _ inrange(n)]
num =0
left, right, top, bottom =0, n -1,0, n -1while left <= right and top <= bottom:for column inrange(left, right +1):
num +=1
ans[top][column]= num
for row inrange(top +1, bottom +1):
num +=1
ans[row][right]= num
if left < right and top < bottom:for column inrange(right -1, left -1,-1):
num +=1
ans[bottom][column]= num
for row inrange(bottom -1, top,-1):
num +=1
ans[row][left]= num
left, right, top, bottom = left +1, right -1, top +1, bottom -1return ans
java:
classSolution{publicint[][]generateMatrix(int n){finalint[][] ans =newint[n][n];int num =0;int left =0, right = n -1, top =0, bottom = n -1;while(left <= right && top <= bottom){for(int column = left; column <= right;++column){
ans[top][column]=++num;}for(int row = top +1; row <= bottom;++row){
ans[row][right]=++num;}if(left < right && top < bottom){for(int column = right -1; column >= left;--column){
ans[bottom][column]=++num;}for(int row = bottom -1; row > top;--row){
ans[row][left]=++num;}}++left;--right;++top;--bottom;}return ans;}}
非常感谢你阅读本文~
欢迎【点赞】【收藏】【评论】~
放弃不难,但坚持一定很酷~
希望我们大家都能每天进步一点点~
本文由 二当家的白帽子:https://le-yi.blog.csdn.net/ 博客原创~
本文转载自: https://blog.csdn.net/leyi520/article/details/131374465
版权归原作者 二当家的白帽子 所有, 如有侵权,请联系我们删除。
版权归原作者 二当家的白帽子 所有, 如有侵权,请联系我们删除。