59. Spiral Matrix II
Given an integern, generate a square matrix filled with elements from 1 ton2in spiral order.
For example,
Givenn=3,
You should return the following matrix:[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
思路:和上一题几乎一样
public class Solution {
public int[][] generateMatrix(int n) {
int[][] res = new int[n][n];
if (n==0){
return res;
}
int left = 0;
int top = 0;
int right = n - 1;
int buttom = n - 1;
int num = 1;
while (true){
for (int i=left;i<=right;i++){
res[top][i] = num++;
System.out.println(1+"top="+top+", i="+i+", sum="+res[top][i]);
}
top++;
if (left>right||top>buttom) break;
for (int i=top;i<=buttom;i++){
res[i][right] = num++;
System.out.println(2+"top="+top+", i="+i+", sum="+res[top][i]);
}
right--;
if (left>right||top>buttom) break;
for (int i=right;i>=left;i--){
res[buttom][i] = num++;
System.out.println(3+"top="+top+", i="+i+", sum="+res[top][i]);
}
buttom--;
if (left>right||top>buttom) break;
for (int i=buttom;i>=top;i--){
res[i][left] = num++;
System.out.println(4+"top="+top+", i="+i+", sum="+res[top][i]);
}
left++;
if (left>right||top>buttom) break;
}
return res;
}
}
另一版本code, 思路讲解https://www.youtube.com/watch?v=dfGhf-Ko0L4
public class Solution{
public int[][] generateMatrix(int n){
int[][] results = new int[n][n];
int left = 0;
int right = n-1;
int top = 0;
int buttom = n-1;
int k = 1;
while(top < buttom && left < right){
for(int i = left; i < right; i++){
results[top][i] = k++;
}
for(int i = top; i < buttom; i++){
results[i][right] = k++;
}
for(int i = right; i>left; i--){
results[buttom][i] = k++;
}
for(int i = buttom; i > top; i--){
results[i][left] = k++;
}
top++;
buttom--;
left++;
right--;
}
if(n%2 != 0){
results[n/2][n/2] = k;
}
return results;
}
}