leetcode 79. 单词搜索

2023.10.16

本题使用回溯法解决,回溯开头先判断i、j是否越界 and 字符是否不匹配。 是的话则直接返回false。 否则,开始回溯判断,后面的字符是否都相等,为了防止矩阵的字符重复使用,回溯前,需要将原来的字符用'#'代替,回溯完再换回来。 java代码如下:

java 复制代码
class Solution {
    private boolean backtrating(char[][] board,char[] word,int i,int j,int k){
        if(i < 0 || i >= board.length || j < 0 || j >= board[0].length || board[i][j] != word[k]) return false;//越界或者字母不匹配
        if(k == word.length-1) return true;
        //两字母匹配 开始回溯
        char temp = board[i][j];
        board[i][j] = '#';
        boolean ans = backtrating(board,word,i+1,j,k+1) || backtrating(board,word,i-1,j,k+1) ||
                      backtrating(board,word,i,j+1,k+1) || backtrating(board,word,i,j-1,k+1);
        board[i][j] = temp;
        return ans;
    }

    public boolean exist(char[][] board, String word) {
        char[] words = word.toCharArray();
        for(int i=0; i<board.length; i++){
            for(int j=0; j<board[0].length; j++){
                if(backtrating(board,words,i,j,0)) return true;
            }
        }
        return false;
    }
}
相关推荐
程序喵大人1 小时前
【C++进阶】STL算法与函数对象 - 09 函数对象保存状态并复用规则
开发语言·c++·算法·stl·函数对象
程序员黑豆5 小时前
Java包装类:基本类型与对象的桥梁
java·前端·ai编程
致Great6 小时前
DeepSeek Harness插件开发实战教程:我让它自己写了一个 arXiv 搜索插件
算法
mldong8 小时前
"applicant" 契约:退回发起人的闭环设计
java·架构
月华路9 小时前
G1 垃圾回收:脏卡队列、记忆集与并发精化线程机制
java·开发语言
gugucoding9 小时前
47. 【Java】Java内存模型(JMM)与可见性
java·开发语言
zww894911110 小时前
校园跑腿系统开发实战指南:从需求分析到上线部署全流程解析
java
Fluxart.ai10 小时前
电商商品图审核怎么自动化?规则引擎、人工复核与发布门禁
java·前端·自动化
罗西的思考10 小时前
【Agent OS / AIOS】AOHP 深度解读:当 OS 开始为 Agent 而设计
人工智能·算法·机器学习