Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
For example,
Given n =
You should return the following matrix:Given n =
3
,[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package leetcode; | |
import java.util.Arrays; | |
/** | |
* Solution: similar to Spiral Matrix I. even simplier because of square | |
* don't forget to return null when n < 0 | |
* | |
* Refactor: | |
* int[level][i] = count; count++; --> int[level][i] = count++; | |
* | |
* @author jeffwan | |
* @date Apr 2, 2014 | |
*/ | |
public class GenerateMatrix { | |
public int[][] generateMatrix(int n) { | |
if (n < 0) { | |
return null; | |
} | |
int[][] result = new int[n][n]; | |
int level = 0; | |
int count = 1; | |
while (level * 2 < n) { | |
for (int i = level; i < n - level; i++) { | |
result[level][i] = count++; | |
} | |
for (int i = level + 1; i < n - level; i++) { | |
result[i][n - level - 1] = count++; | |
} | |
if (n - level * 2 == 1) { | |
break; | |
} | |
for (int i = n - level - 2; i >= level; i--) { | |
result[n - level - 1][i] = count++; | |
} | |
for (int i = n - level - 2; i >= level + 1; i--) { | |
result[i][level] = count++; | |
} | |
level++; | |
} | |
return result; | |
} | |
} |
No comments:
Post a Comment