Wednesday, February 12, 2014

LeetCode: Spiral Matrix II

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 ]
]

Solution:

public class Solution {
    public int[][] generateMatrix(int n) {
        int sol[][] = new int[n][n];
        int count = 0;
        int row = 0;
        int col = 0;
        int direction = 1; //1 to the right,  2 to the bottom, 3 to the lift, 4 to the top
        while ( count< n*n)
        {
            sol[row][col] = ++count;
            switch(direction)
            {
                case 1:
                    col++;
                    if( col >= n-1 || sol[row][col+1] != 0) 
                        direction = 2;
                    break;
                case 2:
                    row++;
                    if( row >= n-1 || sol[row+1][col] != 0) 
                        direction = 3;
                    break;
                case 3:
                    col--;
                    if( col <= 0 || sol[row][col-1] != 0) 
                        direction = 4;
                    break;
                case 4: row--;
                    if( row <= 0 || sol[row-1][col] != 0) 
                        direction = 1;
                    break;
            }
        }
        return sol;
    }
}

No comments :

Post a Comment