如题
一眼看上去最先想到的是暴力解,遍历二维数组的每一个零计算与对应点距离然后缓存起来取最小值。实现上是肯定能实现,但是太粗鲁了。想办法进行优化,需要最近距离,那么我们就从近到远检索0,一旦检索到0即返回距离即可。
public static int[][] updateMatrix(int[][] matrix) {
int [][] nums = new int[matrix.length][matrix[0].length];
for(int m=0;m<matrix.length;m++) {
for(int n=0;n<matrix[0].length;n++) {
nums[m][n]=testnums(matrix,m,n);
}
}
return nums;
}
static int testnums(int[][]matrix,int x,int y) {
int w=matrix.length;
int h=matrix[0].length;
if(matrix[x][y]==0) {
return 0;
}
for(int i=1;i<Math.max(w, h);i++) { //检索的距离循环
for(int m=0;m<=i;m++) { //分割横向上的距离
int n=((x+m<w)&&(y+i-m<h)?matrix[x+m][y+i-m]:1)& //如果组成的index组合符合规范