For example,
Given n =
3,
You should return the following matrix:
[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
public class Solution {
public int[][] generateMatrix(int n) {
if(n<0) {
return null;
}
int matrix[][] = new int[n][n];
if(n==0) {
return matrix;
}
int t = 1;
int loop = 0;
while(t<=n*n) {
for(int i=loop;i<n-loop;i++) {
matrix[loop][i] = t++;
}
if(t>n*n) {
break;
}
for(int i=loop+1;i<n-loop-1;i++) {
matrix[i][n-loop-1] = t++;
}
if(t>n*n) {
break;
}
for(int i=n-loop-1;i>=loop;i--) {
matrix[n-loop-1][i] = t++;
}
if(t>n*n) {
break;
}
for(int i=n-loop-2;i>loop;i--) {
matrix[i][loop] = t++;
}
loop++;
}
return matrix;
}
}
============
public class Solution {
public int[][] generateMatrix(int n) {
int[][] res = new int[n][n];
if (n <= 0) {
return res;
}
int val = 1;
int max = n * n;
int direction = 0;
int i = 0;
int j = -1;
while (val <= max) {
int i2 = i;
int j2 = j;
if (direction == 0) {
j2 += 1;
} else if (direction == 1) {
i2 += 1;
} else if (direction == 2) {
j2 -= 1;
} else if (direction == 3) {
i2 -= 1;
}
if (i2 < 0 || i2 >= n || j2 < 0 || j2 >= n || res[i2][j2] != 0) {
direction = (direction + 1) % 4;
} else {
res[i2][j2] = val++;
i = i2;
j = j2;
}
}
return res;
}
}
没有评论:
发表评论