JavaScript|LeetCode|搜索|130.被围绕的区域

法1:DFS
想法:
1.遍历四周字母,遍历到"O",以该"O"为起点,进行DFS,与该"O"相连的"O"做上标记(包括该"O")。
2.将标记了的位置设值"O",其他位置为"X"。
3.做标记方式:将原"O"设为"T"。

/** * @param {character[][]} board * @return {void} Do not return anything, modify board in-place instead. */
var solve = function(board) {
    if(board.length == 0) {    
        return [];
    }    
    var i = 0, j = 0;    
    var row = board.length, column = board[0].length;
    for(i = 0; i < column; i++) { // 遍历上边界
        if(board[0][i] == 'X') {            
            continue;    
        }        
        else {
            dfs(board, 0, i);        
        }    
    }
    for(i = 0; i < row; i++) { // 遍历左边界
        if(board[i][0] == 'X') {
            continue;
        }        
        else {            
            dfs(board, i, 0);        
        }    
    }
    for(i = 0; i < column; i++) { // 遍历下边界
        if(board[row - 1][i] == 'X') {
            continue;        
        }        
        else {            
            dfs(board, row - 1, i);        
        }    
    }
    for(i = 0; i < row; i++) { // 遍历右边界
        if(board[i][column - 1] == 'X') {
            continue;        
        }        
        else {            
            dfs(board, i, column - 1);        
        }    
    }
    for(i = 0; i < row; i++) {        
        for(j = 0; j < column; j++) {            
            if(board[i][j] == 'T') {                
                board[i][j] = 'O';            
            }            
            else {                
                board[i][j] = 'X';            
            }        
        }    
    }
};

function dfs(board, r, c) {    
    if(r < 0 || r >= board.length || c < 0 || c >= board[0].length || board[r][c] != 'O') {        
        return 0;    
    }    
    board[r][c] = 'T';    
    var i = 0, j = 0;    

    // 遍历相邻节点
    for(i = -1; i < 2; i++) {        
        for(j = -1; j < 2; j++) {            
            if(i == j || i * j == -1) {                
                continue;            
            }            
            dfs(board, r + i, c + j);        
        }    
    }
}

注:参考了答案

发布了7 篇原创文章 · 获赞 0 · 访问量 102

猜你喜欢

转载自blog.csdn.net/J_learner/article/details/104650198
今日推荐