题目描述:
方法一:
我的思路:
画图可知,需要输出的二维数组的顺序如下:(1,2,3为输出的顺序)
主要是要分析边界问题
class Solution {
public int[][] allCellsDistOrder(int rows, int cols, int rCenter, int cCenter) {
int[][] result = new int[rows*cols][];
result[0] =new int[] {rCenter,cCenter};
int nums = 0;
int i=1;
int index=1;
while (nums<rows*cols && i<rows*cols){
for (int j=0;j<=i;j++){
if (j==0){
if (rCenter+j<rows && cCenter+(i-j)<cols ){
result[index]=new int[] {rCenter+j,cCenter+(i-j)};
index++;
nums++;
}
if (rCenter+j<rows && cCenter-(i-j)>=0 ){
result[index]=new int[] {rCenter+j,cCenter-(i-j)};
index++;
nums++;
}
}
else if (i-j==0){
if (rCenter+j<rows && cCenter+(i-j)<cols ){
result[index]=new int[] {rCenter+j,cCenter+(i-j)};
index++;
nums++;
}
if (rCenter-j>=0 && cCenter+(i-j)<cols ){
result[index]=new int[] {rCenter-j,cCenter+(i-j)};
index++;
nums++;
}
}
else {
if (rCenter+j<rows && cCenter+(i-j)<cols ){
result[index]=new int[] {rCenter+j,cCenter+(i-j)};
index++;
nums++;
}
if (rCenter+j<rows && cCenter-(i-j)>=0 ){
result[index]=new int[] {rCenter+j,cCenter-(i-j)};
index++;
nums++;
}
if (rCenter-j>=0 && cCenter+(i-j)<cols ){
result[index]=new int[] {rCenter-j,cCenter+(i-j)};
index++;
nums++;
}
if (rCenter-j>=0 && cCenter-(i-j)>=0 ){
result[index]=new int[] {rCenter-j,cCenter-(i-j)};
index++;
nums++;
}
}
}
i++;
}
return result;
}
}
时间复杂度:O(rows*cols)2
空间复杂度:O(1)