当前位置: 首页 > article >正文

【LeetCode刷题】-- 79.单词搜索

79.单词搜索

image-20231206221326844

方法:使用回溯

使用dfs函数表示判断以网格的(i.j)位置出发,能否搜索到word(k),其中word(k)表示字符串word从第k个字符开始的后缀子串,如果能搜索到,返回true,反之返回false

  • 如果board[i][j]≠word[k],当前字符串不匹配,直接返回false
  • 如果当前已经访问到字符串的末尾,且对应字符依然匹配,此时直接返回true
  • 否则,遍历当前位置的所有相邻位置,如果从某个相邻位置出发,能搜索到子串word[k+1,…],则返回true,否则返回false

为了防止重复遍历相同的位置,需要额外维护一个visited数组,用于标识每个位置是否被访问过,每次遍历相邻位置时,需要跳过已经被访问的位置

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

    public boolean dfs(char[][] board, String word,int r,int c,boolean[][] visited,int index){
      if(board[r][c]!=word.charAt(index)){
          return false;
      }else if(index == word.length() - 1){
          return true;
      }
      visited[r][c] = true;
      boolean result = false;
      int[][] direcions = {{0,1},{0,-1},{1,0},{-1,0}};  //定义方位
      for(int[] dir:direcions){
          int newrow = r + dir[0],newcol = c + dir[1];
          if(newrow>=0 && newrow < board.length && newcol>=0 && newcol<board[0].length){
              if(!visited[newrow][newcol]){
                boolean flag = dfs(board,word,newrow,newcol,visited,index+1);
                if(flag){
                  result= true;
                  break;
                }
              }
          }
      }
      visited[r][c] = false;
      return result;    
    }
}

http://www.kler.cn/a/160564.html

相关文章:

  • 【121. 买卖股票的最佳时机】——贪心算法/动态规划
  • 《新智慧》期刊的征稿范围主要包括哪些方面?
  • 2024/11/13 英语每日一段
  • 【嵌入式开发】单片机CAN配置详解
  • AtomicInteger 和 AtomicIntegerFieldUpdater的区别
  • 黄色校正电容102j100
  • 机器学习之布谷鸟搜索算法(Cuckoo Search Algorithm,CSA)剖析
  • 【MySQL】:数据库基本认识
  • 【网络奇缘】- 计算机网络|深入学习物理层|网络安全
  • HarmonyOS4.0从零开始的开发教程01运行Hello World
  • Linux(centos)学习笔记(初学)
  • git 分支的创建与删除
  • kyuubi整合flink yarn session mode
  • 【唐山海德教育】一级建造师社保需交满多少年
  • 【数值分析】雅可比迭代和高斯-赛德尔迭代求解线性方程组应用举例(编程求解)
  • 使用 OpenFunction 在任何基础设施上运行 Serverless 工作负载
  • Python高级数据结构——B树和B+树
  • vue3版本学习
  • CSS属性 display和visibility的区别
  • 【QT】容器类的迭代
  • 【洛谷算法题】P1909-买铅笔【入门2分支结构】
  • 【恶意刷券】电商中恶意刷券如何防止?
  • 鼎捷受邀出席“中国制造业产品创新数字化国际峰会”,共话工业软件创新发展
  • 深度学习 | 前馈神经网络与反向传播算法
  • LeetCode 2477. 到达首都的最少油耗:深度优先搜索(DFS)
  • 基于Eclipse+SSM+Mysql开发的在线商城