第一题 369. Plus One Linked List
题目描述
假设一个Linked List中的每一个数字代表一个整数的一个位,将这个数加1
算法
我们首先标记出本位不是9且下一位是9的数字,之后检测最后一位,如果是9.则标记的后面全部置0,本身加1。如果标记位本身为null,说明整个都需要进位,创造新的节点
|
|
第二题 2. Add Two Numbers
题目描述
有两个LinkedList表示两个整数(逆序排序,意味着最高位在最左半边),求两个LinkedList相加的值
算法
|
|
第三题 445. Add Two Numbers II
题目描述
给定两个表示非负整数的链表。链表头部表示高位,尾部表示低位,每一个节点只包含一位数。以链表形式返回两个链表的和。
你可以假设两个数字都不包含前导0,除非数字本身就是0。
进一步思考:
你可以不修改输入链表吗?换言之,不允许反转链表。
算法
利用list存储每个数
|
|
第四题 379. Design Phone Directory
题目描述
设计一个电话铺
算法
Queue + HashSet结合
|
|
第五题 127. Word Ladder
题目描述
给定两个单词(beginWord 和 endWord),以及一个字典,寻找从 beginWord 到 endWord 的最短转换序列的长度,满足约束条件:
每次只能改变一个字母
每一个得到的单词必须存在于字典中
例如,给定:
start = "hit"
end = "cog"
dict = ["hot","dot","dog","lot","log"]
最短的转换序列为:”hit” -> “hot” -> “dot” -> “dog” -> “cog”,
返回其长度5。
注意:
如果不存在这样的转换序列,返回0。
所有的单词都是等长的。
所有的单词都只包含小写字母。
算法
双向BFS,将beginword和endword分别存入两个set中。不断的替换,找到下一批临近的words, 之后如果在替换过程中发现了合适的word。返回长度,结束搜索。当所有单词都用完后,如果仍然没有发现有合适的答案,返回0.
|
|
第六题 126. Word Ladder II
题目描述
同上题一样,只是现在需要找出所有的距离最短的路径
算法
双向BFS(获得所需要节点的所有下一变换的可能) + DFS(找出所有可能的结果)
算法略复杂,需要花时间理解
|
|
第七题 490. The Maze
题目描述
在一个迷宫里有一个小球,小球可以朝着一个方向滚动,直到碰到墙壁。求小球在迷宫中是否可以到达指定的位置
算法
利用Queue进行存储我们所有需要访问的下一个点的位置,BFS搜索
|
|
第八题 505. The Maze II
题目描述
与上一题相同,只是现在需要找出的是最短的路径长度
算法
依然使用Queue记录每个方向的目的地,但是现在用一个int[][]的二维矩阵记录离初始点的距离
|
|
第九题 499. The Maze III
题目描述
给定一个二维迷宫,其中包含一个小球和一个洞。小球可以向上(u)、下(d)、左(l)、右(r)四个方向移动。每当小球选择一个方向后,会持续移动直到遇到墙壁为止。小球经过洞时会落入洞中。
给定小球的初始位置ball,洞的位置hole。二维迷宫maze中1表示墙壁,0表示空地,四周被墙壁包围。求小球到洞的最短路径,如果存在距离相等的多条路径,返回字典序最短的那条。
注意:
- 球和洞各只有1个。
- 球和洞只存在于空地上,并且初始位置不同。
- 给定的迷宫不包含边界,但迷宫四周都是墙壁。
- 迷宫至少包含两个空地,并且迷宫的长度和宽度不超过30。
算法
利用新的Point记录当前点的位置及离初始点的距离等信息,然后利用Priority Queue,不断寻找最短的路径
|
|