2020-04-17(542. 01 矩阵**)

难度 中等
这道题花了不少时间,关键是要找对算法。开始尝试过用队列和迭代,都超时了。思路大概就是x,y的距离等于它四周的最小距离+1。先将0写入,再分别从左上到右下,从右下到左上来遍历更新最小距离。
执行用时 :8 ms, 在所有 Java 提交中击败了94.86%的用户
内存消耗 :43.2 MB, 在所有 Java 提交中击败了100.00%的用户

public int[][] updateMatrix(int[][] matrix) {
        int[][] result = new int[matrix.length][matrix[0].length];
        for(int i = 0; i < matrix.length; i++){
            for(int j = 0; j < matrix[0].length; j++){
                if(matrix[i][j] == 0){
                     result[i][j] = 0;
                }else{
                    result[i][j] = 200;
                }
            }
        }

        for(int i = 0; i < matrix.length; i++){
            for(int j = 0; j < matrix[0].length; j++){
                if(i > 0){
                    result[i][j] = Math.min(result[i][j], (result[i-1][j]+1));
                }
                if(j > 0){
                    result[i][j] = Math.min(result[i][j], (result[i][j-1]+1));
                }
            }
        }

        for(int i = matrix.length-1; i >= 0; i--){
            for(int j = matrix[0].length-1; j >= 0; j--){
                 
                if(i < matrix.length - 1){
                    result[i][j] = Math.min(result[i][j], (result[i+1][j]+1));
                }
                if(j  < matrix[0].length - 1){
                    result[i][j] = Math.min(result[i][j], (result[i][j+1]+1));
                }
            }
        }
        return result;
    }   
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容