zoukankan      html  css  js  c++  java
  • [leetcode] Word Search

    题目:(Backtrancing)

    Given a 2D board and a word, find if the word exists in the grid.

    The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same letter cell may not be used more than once.

    For example,
    Given board =

    [
      ["ABCE"],
      ["SFCS"],
      ["ADEE"]
    ]
    

    word = "ABCCED", -> returns true,
    word = "SEE", -> returns true,
    word = "ABCB", -> returns false.

    题解:

    比较有意思的backtracing.

    public class Solution{
        public static boolean exist(char[][] board, String word) {
            for(int i=0; i<board.length; i++)
            {
                for(int j=0; j<board[0].length; j++)
                {
                    if(dfs(board, word, 0, i, j))
                        return true;
                }
            }
            return false;
        }
    
        public static boolean dfs(char[][] board, String word, int index, int x, int y){
            if(index == word.length()-1 && word.charAt(index)==board[x][y])
                return true;
            
            if(word.charAt(index) != board[x][y])
                return false;
            
            char tmp = board[x][y];        
            board[x][y] = '.';
            boolean b1 = false, b2 = false, b3 = false, b4 = false;
            if(x-1>=0 && board[x-1][y] != '.')
                b1 = dfs(board, word, index+1, x-1, y);
            if(!b1 && y-1>=0 && board[x][y-1] != '.')
                b2 = dfs(board, word, index+1, x, y-1);
            if(!b1 && !b2 && x+1<board.length && board[x+1][y] != '.')
                b3 = dfs(board, word, index+1, x+1, y);
            if(!b1 && !b2 && !b3 && y+1<board[0].length && board[x][y+1] != '.')
                b4 = dfs(board, word, index+1, x, y+1);
            
            board[x][y] = tmp;            
            return b1 || b2 || b3 || b4;
        }
    }
  • 相关阅读:
    Iaas/paas/saas 三种模式分别都是做什么?
    sender e
    xshell
    JDK 和JRE区别
    mongodb高级聚合查询
    MongoDB 官方文档中的 aggregate 例子当中的 $sum: 1 , 这里的 1 起什么作用?
    MySQL 当记录不存在时插入,当记录存在时更新
    html中跳转方法(含设定时间)
    处理分页
    Js弹出层,弹出框代码
  • 原文地址:https://www.cnblogs.com/fengmangZoo/p/4212071.html
Copyright © 2011-2022 走看看