Tuesday, February 11, 2014

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:
2D image rotate transformation.
public class Solution {
    public int[][] generateMatrix(int n) {
        int[][] results = new int[n][n];
        if(n == 0) return results;
        
        int index = 0;
        int i = 0;
        int layer = 0;
        for(layer = 0; layer < n/2; layer++){
            for(i = layer; i <= n-2-layer; i++){  //top
                index++;
                results[layer][i] = index;
            }
            for(i = layer; i <= n-2-layer; i++){ // right
                index++;
                results[i][n-1-layer] = index;
            }
            for(i = n-1-layer; i >= layer+1; i--){ // bottom
                index++;
                results[n-1-layer][i] = index;
            }
            for(i = n-1-layer; i >= layer+1; i--){ // left
                index++;
                results[i][layer] = index;
            }
        }
        if(n % 2 != 0) { results[layer][layer] = n*n; } 
        return results;
    }
}

No comments:

Post a Comment