2021-04-10Leetcode 79单词搜索

在矩阵中搜索,很容易联想到回溯和dfs。还是按照常规规定,按照右,下,左,上的顺序进行递归,设置一个和矩阵相同的二维数组判断该位置是否访问过,剩下就是回溯的一般写法了。

class Solution {
    char[] words;
    int row, col, len;
    boolean[][] v;
    public boolean exist(char[][] board, String word) {
        words = word.toCharArray();
        len = words.length;
        row = board.length;
        col = board[0].length;
        v = new boolean[row][col];
        // 循环寻找board和word[0]相同的字符
        for (int i = 0; i < row ; i++) {
            for (int j = 0; j < col ;j++) {
                if (dfs(i, j, 0, board)) return true;
            }
        }
        return false;
    }

    public boolean dfs(int x, int y, int step, char[][] board) {
        if (x >= row || x < 0 || y >= col || y < 0 || v[x][y] || board[x][y] != words[step]) {
            return false;
        }
        if (step == len - 1) {
            return true;
        }
        boolean res;
        v[x][y] = true;
        res = dfs(x + 1, y, step +1, board) || dfs(x, y + 1, step + 1, board) 
        || dfs(x - 1, y, step +1, board) || dfs(x, y - 1, step + 1, board);
        v[x][y] = false;
        return res;
    }
}

图省事,用了全局变量,最好还是不要用全局变量,大一小白一个,java用的也不好,有问题还请指正,谢谢你。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值