天天看點

lintcode 769. 螺旋矩陣

給出整數 n, 傳回一個大小為 n * n 的螺旋矩陣

樣例
樣例 1:

輸入 : n = 3
輸出 :
[
[1,2,3]
[8,9,4]
[7,6,5]
]
樣例 2:

輸入 : n = 5
輸出 : 
[
 [1,2,3,4,5]
 [16,17,18,19,6]
 [15,24,25,20,7]
 [14,23,22,21,8]
 [13,12,11,10,9]
]
           
class Solution {
public:
    /**
     * @param n: a Integer
     * @return: a spiral array
     */
    vector<vector<int>> spiralArray(int n) {
        // write your code here
        int num=1;
        vector<vector<int>> result(n);
        int row=0;//指向第一行
        int col=n-1;//指向最後一列
        int temp=n-1;
        for (int i = 0; i < n; i++) {
            /* code */
            result[i].resize(n);
        }
        for (int i = 0; i < n; i++) {//第一行進行初始化
            /* code */
            result[0][i]=num;
            num++;
        }
        while(temp)
        {
            for (int i = 1; i <= temp; i++) {//從最後一列開始的每一行資料
                /* code */
                row++;
                result[row][col]=num;
                num++;
            }
            for (int i = 1; i <= temp ; i++) {//最後一行開始的每一列資料
                /* code */
                col--;
                result[row][col]=num;
                num++;
            }
            temp--;//最後一個資料必為左轉,左轉後若temp=0即為結束
            if(temp==0) break;
            for (int i = 1; i <= temp; i++) {//第一列開始的每一行資料
                /* code */
                row--;
                result[row][col]=num;
                num++;
            }
            for (int i = 1; i <= temp; i++) {//最上面一行的每一列資料
                /* code */
                col++;
                result[row][col]=num;
                num++;
            }
            temp--;
        }
        return result;
    }
};