๐ŸŒ• 79. ๅ•่ฏๆœ็ดข

ๅžไฝ›็ซฅๅญ2022ๅนด10ๆœˆ10ๆ—ฅ
  • algorithm
  • backtrace
ๅฐไบŽ 1 ๅˆ†้’Ÿ

๐ŸŒ• 79. ๅ•่ฏๆœ็ดข

้šพๅบฆ: ๐ŸŒ•

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

img_1.png


่งฃๆณ•

class Solution {
    public boolean exist(char[][] board, String word) {
        // ๆ€่ทฏ๏ผš
        // ๅ›žๆบฏ
        int row = board.length;
        int col = board[0].length;
        int len = word.length();
        for(int i = 0; i < row; i ++) {
            for(int j = 0; j < col; j ++) {
                if(board[i][j] == word.charAt(0)) {
                    if(mySol(board, word, row, col, len, 0, i, j)) {
                        return true;
                    }
                }
            }
        }
        return false;
    }

    private boolean mySol(char[][] board, String word, int row, int col, int len, int index, int i, int j) {
        // ้€’ๅฝ’็ปˆๆญขๆกไปถ
        if(i < 0 || i >= row || j < 0 || j >= col) {
            return false;
        }
        if(word.charAt(index) != board[i][j]) {
            return false;
        }
        if(index == len - 1) {
            return true;
        }
        // index < len - 1
        char cur = board[i][j];
        board[i][j] = '#'; // ๅšๆ ‡่ฎฐๅŽป้‡
        boolean res = mySol(board, word, row, col, len, index + 1, i - 1, j) 
                || mySol(board, word, row, col, len, index + 1, i + 1, j)
                || mySol(board, word, row, col, len, index + 1, i, j - 1)
                || mySol(board, word, row, col, len, index + 1, i, j + 1);
        if(res == true) {
            return res;
        } else {
            board[i][j] = cur; // ่ฟ˜ๅŽŸ
            return res;
        }
    }
}

่พ“ๅ‡บ

img.png

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