LeetCode Spiral Matrix 2

Description

Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.

For example,
Given n = 3,

You should return the following matrix:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]

The original problem is here.

The original code is here.

My Solution

I solve this problem in C++, as below:

/*
*Spiral Matrix 2
*Author: shuaijiang
*Email: zhaoshuaijiang8@gmail.com
*/
#include<iostream>
#include<vector>
#include<stdlib.h>
using namespace std;

class Solution {
public:
    vector< vector<int> > generateMatrix(int n) {
        vector< vector<int> > matrix;
        vector<int> oneRow; 
        if(n<=0)
            return matrix;
        for(int i=0;i<n;i++)
            oneRow.push_back(0);
        for(int i=0;i<n;i++)
            matrix.push_back(oneRow);
        
        int rowBegin=0, rowEnd=n-1;
        int colBegin=0, colEnd=n-1;
        int num = 1;
        while(rowBegin<rowEnd && colBegin<colEnd){
            for(int i=colBegin;i<colEnd;i++){
                matrix[rowBegin][i] = num++;
                
            }
                
            for(int i=rowBegin;i<rowEnd;i++)
                matrix[i][colEnd] = num++;
            for(int i=colEnd;i>colBegin;i--)
                matrix[rowEnd][i] = num++;
            for(int i=rowEnd;i>rowBegin;i--)
                matrix[i][colBegin] = num++;
            rowBegin ++; rowEnd --;
            colBegin ++; colEnd --;
        }
        if(rowBegin == rowEnd && colBegin == colEnd){
            matrix[rowBegin][colBegin] = num;
        }
        return matrix;     
    }
};
//The code under below is used for test
int main(){
    Solution s;
    int n=2;
    vector< vector<int> > matrix = s.generateMatrix(n);
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++)
            cout<<matrix[i][j]<<" ";
        cout<<endl;
    }
    
    system("pause");
    return 0;
}

Note

To solve the problem, four anchors are needed: rowBegin, rowEnd, colBegin, colEnd. The order I add number to the matrix: rowBegin, colEnd, rowEnd, colBegin. In the end, only one row or one column is remained, then add the number to it.


LeetCode Spiral Matrix 2
http://zhaoshuaijiang.com/2015/07/21/leetcode_spiral_matrix2/
作者
shuaijiang
发布于
2015年7月21日
许可协议