0


算法leetcode|59. 螺旋矩阵 II(rust重拳出击)


文章目录


59. 螺旋矩阵 II:

给你一个正整数

n

,生成一个包含 1n2 所有元素,且元素按顺时针顺序螺旋排列的

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/ 博客原创~


标签: rust 算法 golang

本文转载自: https://blog.csdn.net/leyi520/article/details/131374465
版权归原作者 二当家的白帽子 所有, 如有侵权,请联系我们删除。

“算法leetcode|59. 螺旋矩阵 II(rust重拳出击)”的评论:

还没有评论