79. Word Search

一、题目

  1、审题

  

  2、 分析

    给出一个二维的字符数组 board,一个字符串 word;在 board 中可以向左右、上下延伸,判断 word 是否可以在延伸中找到。其中 board 中每个字符只能用一次。

 

二、解答

  1、思路:

    运用递归的思想进行实现。

    开辟一个二维数组的空间用于记录该字符是否被使用。

class Solution {
    public boolean exist(char[][] board, String word) {
        if(board == null)
            return false;
        int rows = board.length, cols = board[0].length;
        if(rows == 0 || cols == 0 || rows*cols < word.length())
            return false;
        
        boolean[][] isUsed = new boolean[rows][cols];
        for (int row = 0; row < rows; row++) {
            for (int col = 0; col < cols; col++) {
                if(exist(board, row, col, word.toCharArray(), isUsed, 0))
                    return true;
            }
        }
        return false;
    }
    
    private boolean exist(char[][] board, int row, int col, char[] charArray, boolean[][] isUsed, int index) {
        
        if(index == charArray.length)
            return true;
        if(row < 0 || col < 0 ||
                row == board.length || col == board[0].length)
            return false;
        
        if(isUsed[row][col] || board[row][col] != charArray[index])
            return false;
        
        isUsed[row][col] = true;
        boolean isExist = exist(board, row, col+1, charArray, isUsed, index+1)
                || exist(board, row, col-1, charArray, isUsed, index+1)
                || exist(board, row+1, col, charArray, isUsed, index+1)
                || exist(board, row-1, col, charArray, isUsed, index+1);
        isUsed[row][col] = false;
        
        return isExist;
    }
}

 

posted @ 2018-09-23 11:56  skillking2  阅读(193)  评论(0编辑  收藏  举报