博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Word Search leetcode
阅读量:6885 次
发布时间:2019-06-27

本文共 1700 字,大约阅读时间需要 5 分钟。

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 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 =

[  ['A','B','C','E'],  ['S','F','C','S'],  ['A','D','E','E']]

word = "ABCCED", -> returns true, word = "SEE", -> returns true, word

= "ABCB", -> returns false.

回溯法

说明

从每一个点出发, 上下左右搜索看是否能找到相等于word的字符串. 因为每一次的访问的点不能被二次访问, 所以要维护一个m * n 的boolean矩阵记录访问过的点.

复杂度

因为对于每个点来说复杂度都是O(m*n)

所以对于总体来说 时间O(m^2n^2) 空间是boolean数组复杂度O(m*n)

代码

public boolean exist(char[][] board, String word) {    if (word == null || word.length() == 0) {        return true;    }    if (board == null || board.length == 0 || board[0].length == 0) {        return false;    }    boolean[][] visit = new boolean[board.length][board[0].length];    for (int i = 0; i < board.length; i++) {        for (int j = 0; j < board[0].length; j++) {           if ( helper(board, visit, word, i, j, 0)) {               return true;           }        }    }    return false;}public boolean helper(char[][] board, boolean[][] visit, String word, int i, int j, int pos) {    if (pos == word.length()) {        return true;    }    if (i < 0 || i >= board.length || j < 0 || j >= board[0].length || visit[i][j] || board[i][j] != word.charAt(pos)) {        return false;    }    visit[i][j] = true;    boolean res = helper(board, visit, word, i + 1, j, pos + 1) || helper(board, visit, word, i - 1, j, pos + 1) || helper(board, visit, word, i , j - 1, pos + 1) || helper(board, visit, word, i, j + 1, pos + 1);    visit[i][j] = false;    return res;}

转载地址:http://duibl.baihongyu.com/

你可能感兴趣的文章
MySQL外键陷阱
查看>>
Struts Spring Hibernate 整合:SSH2
查看>>
网络设备主备配置系列2:netscreen防火墙双机主备
查看>>
ORACLE RAC 之I/O分离--hangcheck-timer模块配置
查看>>
有用的runas命令,尤其对域用户环境
查看>>
Oracle 备份与恢复学习笔记(11)
查看>>
Windows Home Server 是什么?
查看>>
VC++动态链接库(DLL)编程深入浅出(一)
查看>>
内存技术术语不完全手册
查看>>
20个Linux命令及Linux终端的趣事
查看>>
Howto:在 Windows Server 2008 64-Bit 上安装 WSUS v3.0 with SP1
查看>>
Java 注释
查看>>
从无到有的升级-缓存
查看>>
Android开发技巧——使用RecyclerView实现分组列表
查看>>
磁盘加密技术保障数据安全之七种武器
查看>>
java并发编程(2)--volatile(转)
查看>>
Spring中BeanUtils.copyProperties方法测试
查看>>
Java外挂开发入门示例
查看>>
centos 5.6安装nginx+mysql+php(php-fpm)+phpmyadmin总结
查看>>
SQL记录一下
查看>>