LeetCode-79. 单词搜索-Java-medium

题目链接

法一(回溯法)
public class Solution79 {

    private boolean find;

    public Solution79() {
        this.find = false;
    }

    /**
     * 回溯
     *
     * @param row     行
     * @param col     列
     * @param board   棋盘
     * @param word    要搜索的目标单词
     * @param visited 标记当前格子是否已被访问过
     * @param index   记录目标单词的字符索引
     */
    private void backtracking(int row, int col, char[][] board, String word, boolean[][] visited, int index) {
        if (row < 0 || col < 0 || row >= board.length || col >= board[0].length
                || visited[row][col] || find || board[row][col] != word.charAt(index)) {
            return;
        }
        if (index == word.length() - 1) {
            find = true;
            return;
        }
        visited[row][col] = true;
        backtracking(row + 1, col, board, word, visited, index + 1);
        backtracking(row, col + 1, board, word, visited, index + 1);
        backtracking(row - 1, col, board, word, visited, index + 1);
        backtracking(row, col - 1, board, word, visited, index + 1);
        visited[row][col] = false;
    }

    /**
     * 回溯法
     * 分别从上、右、下、左按顺时针方向探索board格子与word的下一位字母匹配,只要一个方向成功,就返回成功
     *
     * @param board
     * @param word
     * @return
     */
    public boolean exist(char[][] board, String word) {
        if (board == null) {
            return false;
        }
        int rowSize = board.length, colSize = board[0].length;
        boolean[][] visited = new boolean[rowSize][colSize];
        for (int row = 0; row < rowSize; row++) {
            for (int col = 0; col < colSize; col++) { // 从左上角开始遍历棋盘每个格子
                backtracking(row, col, board, word, visited, 0);
            }
        }
        return find;
    }
}

本地测试
        /**
         * 79. 单词搜索
         */
        lay.showTitle(79);
        Solution79 sol79 = new Solution79();
        char[][] board79 = new char[][]{{'A', 'B', 'C', 'E'}, {'S', 'F', 'C', 'S'}, {'A', 'D', 'E', 'E'}};
        String word79 = "ABCCED";
        arrayOpt.showCharTwoDimArray(board79, board79.length);
        System.out.println(word79);
        System.out.println(sol79.exist(board79, word79));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值