穷举vs暴搜vs深搜vs回溯vs剪枝系列一>单词搜索

题解如下

题目:

解析

决策树:

代码设计:

代码:

java 复制代码
class Solution {
    private boolean[][] visit;//标记使用过的数据
    int m,n;//行,列
    char[] word;

    public boolean exist(char[][] board, String _word) {
        m = board.length;
        n = board[0].length;
        visit = new boolean[m][n];
        word = _word.toCharArray();

        for(int i = 0; i < m; i++)
            for(int j = 0; j < n; j++){
                if(word[0] == board[i][j]){
                    visit[i][j] = true;
                    if(dfs(board,i,j,1)) return true;
                    visit[i][j] = false;//恢复现场
                }
            }
        return false;    
    }

    int[] dx = {0,0,-1,1};
    int[] dy = {-1,1,0,0};


    boolean dfs(char[][]board, int i, int j, int pos){
        if(pos == word.length){
            return true;//搜索成功
        }

        for(int k = 0; k < 4; k++) {
            int x = i + dx[k]; 
            int y = j + dy[k];

            if(x >= 0 && x < m && y >= 0 && y < n && !visit[x][y] && word[pos] == board[x][y]){
                visit[x][y] = true;
                if(dfs(board,x,y,pos+1)) return true;
                visit[x][y] = false;//恢复现场
            }
        }

        return false;
    }
}
相关推荐
AI软著研究员1 小时前
程序员必看:软著不是“面子工程”,是代码的“法律保险”
算法
FunnySaltyFish2 小时前
什么?Compose 把 GapBuffer 换成了 LinkBuffer?
算法·kotlin·android jetpack
颜酱3 小时前
理解二叉树最近公共祖先(LCA):从基础到变种解析
javascript·后端·算法
地平线开发者19 小时前
SparseDrive 模型导出与性能优化实战
算法·自动驾驶
董董灿是个攻城狮19 小时前
大模型连载2:初步认识 tokenizer 的过程
算法
地平线开发者19 小时前
地平线 VP 接口工程实践(一):hbVPRoiResize 接口功能、使用约束与典型问题总结
算法·自动驾驶
罗西的思考20 小时前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
HXhlx1 天前
CART决策树基本原理
算法·机器学习
Wect1 天前
LeetCode 210. 课程表 II 题解:Kahn算法+DFS 双解法精讲
前端·算法·typescript
颜酱1 天前
单调队列:滑动窗口极值问题的最优解(通用模板版)
javascript·后端·算法