第一题 51. N-Queens
题目描述
解决N 皇后问题
算法
主要利用回溯, 本题由于要求String格式进行输出,因此比较麻烦
|
|
第二题 52. N-Queens II
题目描述
与上题一样,只不过现在只需要统计出n皇后满足的数字即可
算法
|
|
第三题 31. Next Permutation
题目描述
求下一个最大的数
算法
- 首先先找到从右边起的,往左边数的第一个打破逆序的数字num
- 然后找到右边起的第一个比num大的数字
- 交换他们的位置
- 之后交换所有从num的下一个数字起的所有的位置
|
|
第四题 60. Permutation Sequence
题目描述
一个数字有很多种排列方式,求出对于1 - n组成的数字中,第k种排列方式
算法
对于n,如果拿去n,那么剩下有(n - 1)!种的排列方式。这样,比如对于1,2,3,4。我们需要第23种排列,那么22 / 3! = 3。我们可以知道,1 - 6对应位置0,即开头是1 剩下的所有组合是 {2,3,4}的排列。7 - 12对应位置1, 即开头是2,剩下对应的是{1,3,4}的排列。现在对应位置是3,那么即第一个数字是4,剩下{1,2,3}的排列。
根据这种方法,循环直到找到最后一个数
|
|
第五题 77. Combinations
题目描述
求一个1 ~ n的所有数字中,有所少种长度为n的组合方式
算法
还是基本的回溯的方法
|
|
第六题 79. Word Search
题目描述
在一个二维矩阵中,查看是否存在一个指定单词。规则是,只能在二维矩阵中上下左右移动,并进行寻找
算法
使用DFS进行搜索
|
|
第七题 212. Word Search II
题目描述
给定二维格板和一组单词,在格板中找出这些单词。
每一个单词必须通过顺序邻接的单元格中的字母构成,“邻接”是指水平或者竖直方向相邻。同一个单元格中的字母在构建某个单词时最多只能使用一次。
测试用例见题目描述。
注意:
你可以假设输入只包含小写字母a-z
你需要最优化你的回溯策略,以通过数据规模比较大的测试样例。能不能尽可能早的停止回溯?
提示:
如果当前的候选单词在所有的单词前缀中都不存在,就可以立即停止回溯。什么样的数据结构可以更加有效地响应这种查询?哈希表可以吗?为什么可以或者不行?字典树怎么样?如果要了解字典树的基础知识,可以先完成这道题目:Implement Trie (Prefix Tree) ,实现字典树(前缀树)
算法
利用字典树,进行DFS。 否则会timeout
|
|
第八题 208. Implement Trie (Prefix Tree)
题目描述
实现字典树,包含插入,查找和前缀查找方法。
注意:
你可以假设所有的输入只包含小写字母a-z
算法
下面这个是自己的版本的
|
|
第九题 211. Add and Search Word - Data structure design
题目描述
设计一个数据结构支持下列两种操作:
void addWord(word)
bool search(word)
search(word)可以搜索一个普通字符串或者一个只包含字母a-z或者.的正则表达式。符号.代表任意单个字母。
测试用例见题目描述。
注意:
你可以假设所有的单词只包含小写字母a-z
提示:
完成此题目之前,最好先做Implement Trie (Prefix Tree)
算法
还是使用Trie的思想
|
|