题目:https://leetcode.com/problems/spiral-matrix-ii/submissions/
简介:额怎么说这道题目比较考验边界条件的考虑和程序设计,没有什么特别难的点和思路,只要把边界条件设置情况,穷举的思路就可以得到解答,不过在Discuss里面却发现一个很有意思的解答,加入前后左右的方向二元向量,让边界条件的选取多了一丝趣味,之前更多想从Matrix本身角度考虑,算是新发现。
过程之上:
- 自己写的代码实在乱得可以,各种边界条件混杂,就借鉴于那个100%killer的方向向量作为参考吧。
- 在此之上,可以考虑把这个方向向量作为固定参数。
class Solution {
public int[][] generateMatrix(int n) {
int[][] ans = new int[n][n];
int num = 0;
boolean right = true;
boolean down = false;
boolean left = false;
boolean up = false;
int i = 0, j = 0;
while(num < n*n){
if(right){
if(j >= ans.length || ans[i][j] != 0){
right = false;
down = true;
j--;
i++;
} else {
num = num + 1;
ans[i][j] = num;
j++;
}
}else if (down){
if(i >= ans.length || ans[i][j] != 0){
down = false;
left = true;
i--;
j--;
} else {
num = num + 1;
ans[i][j] = num;
i++;
}
} else if (left){
if(j < 0 || ans[i][j] != 0){
left = false;
up = true;
j++;
i--;
} else {
num = num + 1;
ans[i][j] = num;
j--;
}
} else if (up){
if(i < 0 || ans[i][j] != 0){
up = false;
right = true;
i++;
j++;
} else {
num = num + 1;
ans[i][j] = num;
i--;
}
}
}
return ans;
}
}