๐ŸŒ• ๐ŸŒ• 130. ่ขซๅ›ด็ป•็š„ๅŒบๅŸŸ

ๅžไฝ›็ซฅๅญ2022ๅนด6ๆœˆ20ๆ—ฅ
  • algorithm
  • dfs
ๅคง็บฆ 1 ๅˆ†้’Ÿ

๐ŸŒ• ๐ŸŒ• 130. ่ขซๅ›ด็ป•็š„ๅŒบๅŸŸ

้šพๅบฆ: ๐ŸŒ• ๐ŸŒ•

้—ฎ้ข˜ๆ่ฟฐ

img_5.png


่งฃๆณ•

class Solution {
    public void solve(char[][] board) {
        // ๆ€่ทฏ๏ผš
        // ่ฆๆ‰พๅˆฐๅ“ชไบ›ๆ˜ฏ่ขซ X ็Žฏ็ป•็š„ 0
        // ๅณ๏ผŒๅ“ชไบ›ๆ˜ฏไธ่ขซ X ็Žฏ็ป•็š„ 0๏ผŸ ==> ไธŽ่พน็•Œ็š„ 0 ็›ธ่ฟž็š„ 0 ๅฐฑๆ˜ฏไธ่ขซ็Žฏ็ป•็š„
        // ๆ‰พๅˆฐ่พน็•Œ็š„ 0 ๏ผŒไปฅ ่ฏฅ็‚นๅ‘ๅ››ไธชๆ–นๅ‘ๅšๆทฑๅบฆไผ˜ๅ…ˆๆœ็ดข
        int row = board.length;
        int col = board[0].length;
        for(int i = 0; i < row; i ++) {
            if(board[i][0] == 'O') {
                mySol(board, row, col, i, 0);
            }
            if(board[i][col - 1] == 'O') {
                mySol(board, row, col, i, col - 1);
            }
        }
        for(int j = 0; j < col; j ++) {
            if(board[0][j] == 'O') {
                mySol(board, row, col, 0, j);
            }
            if(board[row - 1][j] == 'O') {
                mySol(board, row, col, row - 1, j);
            }
        }
        // ๅฐ† board[][] ไธญ็š„ '#' ่ฟ˜ๅŽŸไธบ 'O'
        for(int i = 0; i < row; i ++) {
            for(int j = 0; j < col; j ++) {
                if(board[i][j] == '#') {
                    board[i][j] = 'O';
                } else if(board[i][j] == 'O') {
                    board[i][j] = 'X';
                }
            }
        }
    }

    private void mySol(char[][] board, int row, int col, int i, int j) {
        // ้€’ๅฝ’็ปˆๆญขๆกไปถ
        if(!isValid(row, col, i, j)) {
            return;
        }
        if(board[i][j] == 'X' || board[i][j] == '#') {
            return;
        }
        // board[i][j] 
        board[i][j] = '#'; // [i, j] == O ่ฟ›่กŒๆ ‡่ฎฐ๏ผŒ่ฏฅ็‚น่กจ็คบ O ๅฏไปฅๅˆฐ่พพ
        mySol(board, row, col, i + 1, j);
        mySol(board, row, col, i - 1, j);
        mySol(board, row, col, i, j - 1);
        mySol(board, row, col, i, j + 1);
    }

    private boolean isValid(int row, int col, int i, int j) {
        if(i < 0 || j < 0) {
            return false;
        }
        if(i >= row || j >= col) {
            return false;
        }
        return true;
    }
}

่พ“ๅ‡บ

img_4.png

ไธŠๆฌก็ผ–่พ‘ไบŽ: 2022/6/20 ไธ‹ๅˆ8:24:47
่ดก็Œฎ่€…: liuxianzhishou