leetcode_130被围绕的区域

2020-08-11  本文已影响0人  看到这朵小fa了么

从边缘的O开始进行递归标记,最终进行还原,标记了的不符合条件

var solve = function(board) {
    let m = board.length;
    if(m == 0){return};
    let n = board[0].length;
    let cannot = {};
    let dfs = function(i, j) {
        if( i<0 ||i===m || i<0 || j<0 || j===n || cannot[i+'-'+j] || board[i][j]!== 'O'){
            return 
        }
        cannot[i+'-'+j] = true
        dfs(i-1, j)
        dfs(i+1, j)
        dfs(i, j-1)
        dfs(i, j+1)
    }
// 从边缘开始发散进行递归标记
    for(let i=0; i<m; i++){
        for(let j=0; j<n; j++){
            if((i===0 || j===0 || i=== m-1 || j === n-1) && board[i][j] === 'O') {
                dfs(i, j)
            }
        }
    }
// 去除边界条件处理
    for(let i=1; i<m-1; i++){
        for(let j=1; j<n-1; j++){
            if(!cannot[i + '-' + j] && board[i][j] === 'O') {
                board[i][j] = 'X'
            }
        }
    }
};
上一篇 下一篇

猜你喜欢

热点阅读