Lintcode 381. 螺旋矩阵 II 题解

描述

给你一个数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 };

 

posted @ 2018-05-19 10:07  J1ac  阅读(189)  评论(0)    收藏  举报