力扣练习之单词搜索

我爱海鲸 2023-03-20 20:44:32 力扣、中级算法

简介中级算法、回溯算法

原题出处:https://leetcode.cn/leetbook/read/top-interview-questions-medium/xvkwe2/

解法一:

class Solution {
    public boolean exist(char[][] board, String word) {
        for (int i = 0 ; i < board.length; i++) {
            for (int j = 0 ; j < board[i].length; j++) {
                if (dfs(board,word.toCharArray(),i,j,0)) {
                    return true;
                }
            }
        }
        return false;
    }


    private boolean dfs(char[][] board,char[] words,int i, int j, int index) {
        if (i < 0 || i >= board.length || j < 0 ||
             j >= board[0].length || board[i][j] != words[index] ) {
                 return false;
        }
        if (words.length == index+1) {
            return true;
        }
        char tmp = board[i][j];
        board[i][j] = '.';
        boolean bool = dfs(board,words,i+1,j,index +1)
                        || dfs(board,words,i-1,j,index + 1)
                        || dfs(board,words,i,j+1,index + 1)
                        || dfs(board,words,i,j-1,index + 1)
                    ;
        board[i][j] = tmp;
        return bool;
    }

}

思路:回溯法,我记得之前也有类似的题目,从第一个元素开始,上下左右进行递归,所以递归的时候需要注意边界值的判断,然后在回溯的时候需要把当前的值设置为另一个字符,递归完成之后再将其改回来。

你好:我的2025