Leetcode 1030.距离顺序排列矩阵单元格
这里使用了几何法,距离相等的都在一个斜的正方形上,这个算法给我最大的启发是通过设定两个数组,实现下表的移动。
class Solution {
public int dr[]={1,1,-1,-1};
public int dc[]={1,-1,-1,1};
public int[][] allCellsDistOrder(int R, int C, int r0, int c0) {
int maxd = Math.max(r0,R-r0-1)+Math.max(c0,C-1-c0);//求最大距离
int[][] ret = new int[R*C][];
int row = r0,col = c0;
int index = 0;
ret[index++]=new int[]{row,col};
for(int dist = 1;dist<=maxd ;dist+=1){
row--;
for(int i=0;i<4;i++){
while((i%2==0&&row!=r0)||(i%2==1&&col!=c0)){
if(row>=0&&row<R&&col>=0&&col<C){
ret[index++]=new int[]{row,col};
}
row+=dr[i];
col+=dc[i];
}
}
}
return ret;
}
}