[leetcode]-542 01 Matrix

基本思路:对每个cell,设与最近0的距离为d,按d=0~nRows+nCols进行对其附近的cell进行搜索,若搜索到0则立即返回当时的d值

d = 0 即对应自身为0的情形。

代码:

class Solution {
public:
    vector<vector<int>> updateMatrix(vector<vector<int>>& matrix) {
        int nRows = matrix.size();
        int nCols = matrix[0].size();
        vector<vector<int>> res(nRows);
        for(int i = 0; i < nRows; ++ i){
            res[i].resize(nCols);
        }
        for(int i = 0; i < nRows; ++ i){
            for(int j = 0; j < nCols; ++j){
                if(matrix[i][j] == 0){
                    res[i][j] = 0;
                }else{
                    for(int delta = 1; delta < nRows + nCols; ++ delta){
                        for(int m = 0; m <= delta; ++ m){
                            int x1 = i - m;
                            int x2 = i + m;
                            int y1 = j - (delta - m);
                            int y2 = j + (delta - m);
                            if((x1 >= 0 && y1 >= 0 && matrix[x1][y1] == 0) ||
                               (x1 >= 0 && y2 < nCols && matrix[x1][y2] == 0) ||
                               (x2 < nRows && y1 >= 0 && matrix[x2][y1] == 0) ||
                               (x2 < nRows && y2 < nCols && matrix[x2][y2] == 0)){
                                res[i][j] = delta;
                                delta = nRows + nCols;
                                break;
                            }
                        }
                    }
                }
            }
        }
        return res;
    }
};



猜你喜欢

转载自blog.csdn.net/ljh0302/article/details/66981567