public class Solution {
public int[][] generateMatrix(int n) {
// 0 up, 1 down, 2 left, 3 right
int val = 1;
int pre = 3;
int i = 0;
int j = 0;
int[][] m = new int[n][n];
while(val<=n*n){
m[i][j] = val++;
switch (pre){
case 0:
if (i+1<n && m[i+1][j] == 0) {
i++;
// Cannot go up, turn left.
}else {
j--;
pre = 2;
}
break;
case 1:
if (i-1>=0 && m[i-1][j] == 0){
i--;
// Cannot go down, turn right.
}else{
j++;
pre = 3;
}
break;
case 2:
if (j-1>=0 && m[i][j-1] == 0){
j--;
// Cannot go left, turn down.
}else{
i--;
pre = 1;
}
break;
case 3:
if (j+1<n && m[i][j+1] == 0){
j++;
// Cannot go right, turn up.
}else{
i++;
pre = 0;
}
break;
default: break;
}
}
return m;
}
}
Spiral Matrix II
最新推荐文章于 2014-11-06 13:32:07 发布