描述
给你一个数n
生成一个包含1-n^2
的螺旋形矩阵
样例
n = 3
矩阵为
[[ 1, 2, 3 ],[ 8, 9, 4 ],[ 7, 6, 5 ] ]
思路:和上一题打印螺旋数组思路相同,只不过这次改成了往数组里面填数字。
1 class Solution { 2 public: 3 /** 4 * @param n: An integer 5 * @return: a square matrix 6 */ 7 vector<vector<int>> generateMatrix(int n) { 8 // write your code here 9 vector<vector<int>> matrix(n,vector<int>(n,0)); 10 int xlen = n; 11 int ylen = n; 12 int direct = 0; 13 int index_x = 0; 14 int index_y = -1;//这个入口坐标还是挺重要的,每次都需要确定一条边遍历的起始位置! 15 int num = 1; 16 while(xlen && ylen){//循环出口 17 if(direct == 0){ 18 for(int i = 1;i <= xlen; ++i){ 19 matrix[index_x][index_y+i] = num++; 20 } 21 index_y += xlen; 22 ylen--; 23 }else if(direct == 1){ 24 for(int i = 1;i <= ylen;++i){ 25 matrix[index_x+i][index_y] = num++; 26 } 27 index_x += ylen; 28 xlen--; 29 }else if(direct == 2){ 30 for(int i = 1;i <= xlen; ++i){ 31 matrix[index_x][index_y-i] = num++; 32 } 33 index_y -= xlen; 34 ylen--; 35 }else{ 36 for(int i = 1;i <= ylen;++i){ 37 matrix[index_x-i][index_y] = num++; 38 } 39 index_x -= ylen; 40 xlen--; 41 } 42 direct = (direct+1)%4;//每次改变方向,0向右,1下,2左,3上。 43 } 44 return matrix; 45 } 46 };