单词搜索 递归

时间:2021-07-12
本文章向大家介绍单词搜索 递归,主要包括单词搜索 递归使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

题目:

  

 思路:

  递归

  从每一个位置出发,向上下左右走 与目标数据进行对比

  边界条件 是否越界 是否相等

  注意: 走过的路不能走,  走过的路用 * 或其他非字母标记,

         递归回来的时候记得 还原为原来的数据,否则回来时,一直会走false


 (一)代码

class Solution {

    public boolean exist(char[][] board, String word) {

        //遍历每一个格子,让其往四个方向走,四个方向的结果取或,如果走不通就返回false
        char arr[] = word.toCharArray();
        for(int i = 0; i < board.length; i ++) {
            for(int j = 0; j < board[0].length; j ++) {
                if(board[i][j] == arr[0] && dfs(board,arr,i,j,0))
                    return true;
            }
        }
        return false;

    }

    public boolean dfs(char[][] board,char[] arr,int i,int j,int k) {

        //判断是否越界  或者 是否走过的路
        if(i < 0 || i > board.length - 1 || j < 0 || j > board[0].length - 1 || board[i][j] != arr[k]){
            return false;
        }
        //找到了完整的路径
        if(k == arr.length - 1){
            return true;
        }

        //暂存i j 位置数据
        char temp = board[i][j];
        //走过的位置,标记字符
        board[i][j] = '*';
        //上下左右移动
        boolean res = dfs(board,arr,i-1,j,k+1) ||
                      dfs(board,arr,i,j-1,k+1) ||
                      dfs(board,arr,i+1,j,k+1) ||
                      dfs(board,arr,i,j+1,k+1);

        //递归结束还原原有数据, 否则会一直进false
        board[i][j] = temp;

        return res;
    }

}

        下了非常大的雨,坐公交来的

            

              好困

    沉迷股市,但赚不上钱,来来回回一场空,但还是要玩。  — - —

原文地址:https://www.cnblogs.com/misscai/p/15002065.html