今天学到了一种非常好的方法,虽然自己有想到按照右下左上四个方向去螺旋进行赋值,但是对于leetcode上大佬所讲解的用四周边界作为条件可以有效解决循环时候的边界问题,同时,用while循环判断的好处在于最后一个元素落到的位置和row=column的时候元素位置有很好的作用,减少bug的出现。(不得不感叹,真的好强嗷= =)
class Solution { public: vector<vector<int>> generateMatrix(int n) { vector<vector<int>> m(n,vector<int>(n,0)); int num=1; int left=0,right=n-1,up=0,down=n-1; while(num<=n*n) { for(int i=left;i<=right;i++) //从左到右依次赋值 { m[up][i]=num++; } up++; //上面的行满了,所以顶要加一向下走 for(int i=up;i<=down;i++) //从右到下依次赋值 { m[i][right]=num++; } right--; for(int i=right;i>=left;i--) //从右到左 { m[down][i]=num++; } down--; for(int i=down;i>=up;i--) //从下到上 { m[i][left]=num++; } left++; } return m; } };
原文:https://www.cnblogs.com/nxnslc-blog/p/12380921.html