题目:单词搜索
来源:互联网 发布:全球域名注册局 编辑:程序博客网 时间:2024/05/17 04:33
给出一个二维的字母板和一个单词,寻找字母板网格中是否存在这个单词。单词可以由按顺序的相邻单元的字母组成,其中相邻单元指的是水平或者垂直方向相邻。每个单元中的字母最多只能使用一次。
您在真实的面试中是否遇到过这个题?
Yes
样例
给出board =
[
"ABCE",
"SFCS",
"ADEE"
]
word = "ABCCED", ->返回 true,
word = "SEE",-> 返回 true,
word = "ABCB", -> 返回 false.
标签 Expand
解题思路:
递归回溯,用一个visited记录走过的路,不能走成功就回溯。
用一个direct2维数组表示其4个方位可访问的位置
public class Solution { /** * @param board: A list of lists of character * @param word: A string * @return: A boolean */ public boolean exist(char[][] board, String word) { // write your code here if(null==board||0==board.length){ return false; } boolean visited[][] = 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(board[i][j]==word.charAt(0)){ visited[i][j] = true; if(word.length()==1||search(i, j, board, word.substring(1), visited)){ return true; } visited[i][j] = false; } } } return false; } public boolean search(int i,int j,char[][] board,String word,boolean[][] visited){ if(word.length()==0){ return true; } int[][] direct = new int[][]{{-1,0},{1,0},{0,-1},{0,1}}; for(int k=0;k<direct.length;k++){ int ii = i+direct[k][0]; int jj = j+direct[k][1]; if(ii>=0&&ii<board.length&&jj>=0&&jj<board[i].length&&!visited[ii][jj]&&word.charAt(0)==board[ii][jj]){ visited[ii][jj] = true; if(word.length()==1||search(ii, jj, board, word.substring(1), visited)){ return true; } visited[ii][jj] = false; } } return false; }}
0 0
- 题目:单词搜索
- 单词搜索
- 单词搜索
- 单词搜索
- 【搜索题目】
- 题目105:单词替换
- 题目1159: 单词替换
- 题目1111:单词替换
- 题目1182:统计单词
- 题目1182:统计单词
- 题目1182:统计单词
- 题目1111:单词替换
- 题目1111:单词替换
- 题目1182:统计单词
- 题目1182:统计单词
- 题目:单词计数
- 题目:最长单词
- 题目1111:单词替换
- java基础—8.IO输入输出流
- Leet Code Medium 1 two sum
- 使用 IndexedDB
- HighCharts 详细使用及API文档说明
- 再谈程序员要注重沟通能力的提升——如何培养起写作的习惯
- 题目:单词搜索
- iOS开发系列课程(06) --- 常用控件介绍
- Java学习笔记,基础总结(二)
- Leetcode 228 Summary Ranges
- 题目:合并k个排序链表
- restify Routing
- 15_09_08 Log.i();初学者易范错误
- IndexedDB
- cocos2d-x常见的报错(收集整理)