内容简介:给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。说明:
leetcode 212. 单词搜索 II
给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。
示例:
输入: words = ["oath","pea","eat","rain"] and board = [ ['o','a','a','n'], ['e','t','a','e'], ['i','h','k','r'], ['i','f','l','v'] ] 输出: ["eat","oath"]
说明:
你可以假设所有输入都由小写字母 a-z 组成。
首先,这道题我们可以构建一个Trie树。
但是,我选择递归。
虽然慢,但是爽。
这次的代码写得欠收拾,但是从0到1解决了,从1到多还不是吃豆芽一样。
走起:
func findWords(board [][]byte, words []string) []string { //第一维 lb := len(board) //第二维,命名请忽略哈哈 lbb := len(board[0]) //依旧闭包上瘾 var DFS func (string,int,int,[][]bool) bool DFS = func (s string,x int,y int, flag [][]bool) bool{ if len(s) == 0 { return true } //越界,或者当前字母不满足构成单词,或者当前字母在当前单词已被使用过就返回false if x < 0 || x >= lbb || y < 0 || y >= lb || s[0] != board[y][x] || flag[y][x]{ return false } //我们将当前满足条件的字母记忆化 flag[y][x] = true //这里是重点,我们向四个方向分别递归,只要有一个方向能满足就可以返回true if DFS (s[1:],x,y+1,flag) || DFS (s[1:],x-1,y,flag) || DFS (s[1:],x,y-1,flag) || DFS (s[1:],x+1,y,flag){ return true } //不影响下次 flag[y][x] = false return false } re := []string{} for _, v := range words { //这里我想的是每个单词都要重新来一个二维数组判断字母是否重复。看着很不顺眼 flag := [][]bool{} for i:=0; i<lb; i++ { flag = append(flag,make([]bool,lbb)) } //这里因为不想使用goto,所以来了个二级跳 needBreak := false for i:=0; i<lb; i++ { for j:=0; j<lbb; j++ { if DFS(v,j,i,flag) { re = append(re,v) needBreak= true break } } if needBreak{ break } } } return re }
这次的代码比较不满意,需要完善的地方太多了,但是我依然觉得思路更重要一些。当然了,对一个极客来说,手写一个Trie树,获得最好的性能才是目标。OK,以后再说咯哈哈。
算法梦想家,来跟我一起玩算法,玩音乐,聊聊文学创作,咱们一起天马行空!
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Head First Web Design
Ethan Watrall、Jeff Siarto / O’Reilly Media, Inc. / 2009-01-02 / USD 49.99
Want to know how to make your pages look beautiful, communicate your message effectively, guide visitors through your website with ease, and get everything approved by the accessibility and usability ......一起来看看 《Head First Web Design》 这本书的介绍吧!