01 Matrix

https://www.lintcode.com/problem/01-matrix/description

import java.util.Arrays;

public class Solution {
    /**
     * @param matrix: a 0-1 matrix
     * @return: return a matrix
     */
    public int[][] updateMatrix(int[][] matrix) {
        // write your code here
        int[][] res = new int[matrix.length][matrix[0].length];
        for (int i = 0; i < res.length; i++) {
            int[] re = res[i];
            Arrays.fill(re, Integer.MAX_VALUE);
            for (int j = 0; j < re.length; j++) {
                if (matrix[i][j] == 0) {
                    re[j] = 0;
                }
            }
        }
        for (int i = 0; i > -1; i++) {
            boolean find = false;
            int nextDistance = i + 1;
            for (int j = 0; j < res.length; j++) {
                int[] re = res[j];
                for (int k = 0; k < re.length; k++) {
                    if (re[k] == i) {
                        find = true;
                        if (k > 0) {
                            re[k - 1] = Math.min(re[k - 1], nextDistance);
                        }
                        if (k < re.length - 1) {
                            re[k + 1] = Math.min(re[k + 1], nextDistance);
                        }
                        if (j > 0) {
                            res[j - 1][k] = Math.min(res[j - 1][k], nextDistance);
                        }
                        if (j < res.length - 1) {
                            res[j + 1][k] = Math.min(res[j + 1][k], nextDistance);
                        }
                    }
                }
            }
            if (!find) {
                break;
            }
        }
        return res;
    }
}

你可能感兴趣的:(01 Matrix)