[Leetcode] Spiral Matrix II(Medium)
LeetCode 59 - Spiral Matrix II
Given a positive integer n, generate an n x n matrix filled with elements from 1 to n2 in spiral order.
example
Input: n = 3
Output: [[1,2,3],[8,9,4],[7,6,5]]
Input: n = 1
Output: [[1]]
How can we solve this problem?
這題跟Spiral Matrix
做法差不多,我們不難發現他的移動模式就是(右→下↓左←上),我們只需要通過幾個變數來限制移動的步數。另外,這題需要我們返回一個n2的array,所以,需要額外定義一個counter來記錄每次插入的數值為多少,因此,只要counter 到達n2的大小就知道是否完成插入所需的值。
Solution:
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
//total step n^2
vector<vector<int>> res(n,vector<int>(n,0));
int c = 1;
int upperRow = 0,lowerRow = n - 1;
int upperCol = 0,lowerCol = n - 1;
while(c <= n*n){
//moving left
if(upperCol <= lowerCol){
//n step
for(int i = upperCol;i<=lowerCol;i++){
res[upperRow][i] = c++;
}
}
upperRow ++; //moving down
//moving down
if(upperRow <= lowerRow){
for(int i = upperRow;i<=lowerRow;i++){
res[i][lowerCol] = c++;
}
}
lowerCol--;
//moving right
if(lowerCol >= upperCol){
for(int i = lowerCol;i>=upperCol;i--){
res[lowerRow][i] = c++;
}
}
lowerRow --;
//moving up
if(lowerRow >= upperRow){
for(int i = lowerRow;i>=upperRow;i--){
res[i][upperCol] = c++;
}
}
upperCol ++;
}
return res;
}
};