Skip to content

59 Spiral Matrix II – Medium

Problem:

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

Thoughts:

This is almost identical to the version I of the problem. The only difference is filling elements, instead of printing elements.

Solutions:

public class Solution {
    public int[][] generateMatrix(int n) {
        int[][] result = new int[n][n];
        int up = 0, left = 0, right = n - 1, down = n - 1;
        int deltaI = 0, deltaJ = 1;
        int count = 1;
        int i = 0, j = 0;
        while ( left <= right && up <= down) {
            if (j > right) {
                deltaI = 1; 
                deltaJ = 0;
                j = right;
                up ++;
            }
            else if (i > down) {
                deltaI = 0;
                deltaJ = -1;
                i = down;
                right --;
            }
            else if (j < left) {
                deltaI = -1;
                deltaJ = 0;
                j = left;
                down --;
            }
            else if (i < up) {
                deltaI = 0;
                deltaJ = 1;
                i = up;
                left ++;
            }
            else {
                result[i][j] = count;
                count ++;
            }
            i = i + deltaI;
            j = j + deltaJ;
        }
        return result;
    }

}