zoukankan      html  css  js  c++  java
  • 79. Word Search 矩阵中查找单词

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

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

    Example:

    board =
    [
      ['A','B','C','E'],
      ['S','F','C','S'],
      ['A','D','E','E']
    ]
    
    Given word = "ABCCED", return true.
    Given word = "SEE", return true.
    Given word = "ABCB", return false.

    思路:
    board [y] [x] ^ = 256这是标记,表明位置x,y的字母是我们搜索的单词的一部分。
    在board [y] [x] ^ = 256之后,字符变为无效字母。在第二个木板[y] [x] ^ = 256之后,
    它再次变为有效字母

    因为先判断board.length,顺序应该是先y后x

    index小于0不行,等于边界不行

    if (y<0 || x<0 || y == board.length || x == board[y].length)

    这是通过或运算实现的,只要有一个方向通过即可

    首先是返回true的这种情况,就验证到头了呗

    最后一个字母不相等也不行

    class Solution {
        public boolean exist(char[][] board, String word) {
            //cc
            
            //双重for循环,经过每一个点
            for (int y = 0; y < board.length; y++) {
                for (int x = 0; x < board[0].length; x++) {
                    if (doExist(board, word, y, x, 0))
                        return true;
                }
            }
            
            return false;
        }
        
        public boolean doExist(char[][] board, String word,
                              int y, int x, int i) {
            //word到头,是相等了
            if (i == word.length())
                return true;
            
            //矩阵到头
            if (y < 0 || y >= board.length || x < 0 || x >= board[y].length)
                return false;
            
            //最后一位不相等
            if (board[y][x] != word.charAt(i))
                return false;
            
            //扩展
            board[y][x] ^= 256;
            boolean exist = doExist(board, word, y - 1, x, i + 1) ||
                            doExist(board, word, y + 1, x, i + 1) ||
                            doExist(board, word, y, x - 1, i + 1) ||
                            doExist(board, word, y, x + 1, i + 1);
            board[y][x] ^= 256;
            
            return exist;
        }
    }
    View Code
     
  • 相关阅读:
    IM,游戏服务端 tcp 框架整理
    IronPython初体验和实战集合等类型转换和类型匹配
    C# 控件包
    ORM框架系列
    C# Excel或表格插件
    vue之修饰符
    vue之单表输入绑定
    vue之计算属性和侦听器
    vue之指令系统
    vue之用法
  • 原文地址:https://www.cnblogs.com/immiao0319/p/13580420.html
Copyright © 2011-2022 走看看