Hierholzer算法的应用
Hierholzer算法的基本过程
1 | (1) 选择任一顶点为起点,遍历所有相邻边。 |
性质一:如果该图为欧拉图,则栈底的必定为起点。如果该图为半欧拉图,则栈底部存储的是与起点不同的另外一个奇度数顶点。
性质二:如果该图为欧拉图(/半欧拉图),则栈中的自底到顶第$n$个顶点就是欧拉回路(/欧拉路径)上的第$n$个顶点。
问题一:LeetCode-332 重新安排行程
给定一个机票的字符串二维数组 [from, to]
,子数组中的两个成员分别表示飞机出发和降落的机场地点,对该行程进行重新规划排序。所有这些机票都属于一个从JFK(肯尼迪国际机场)出发的先生,所以该行程必须从 JFK 出发。
说明:
- 如果存在多种有效的行程,你可以按字符自然排序返回最小的行程组合。例如,行程 [“JFK”, “LGA”] 与 [“JFK”, “LGB”] 相比就更小,排序更靠前
- 所有的机场都用三个大写字母表示(机场代码)。
- 假定所有机票至少存在一种合理的行程。
示例 1:
1 | 输入: [["MUC", "LHR"], ["JFK", "MUC"], ["SFO", "SJC"], ["LHR", "SFO"]] |
示例 2:
1 | 输入: [["JFK","SFO"],["JFK","ATL"],["SFO","ATL"],["ATL","JFK"],["ATL","SFO"]] |
代码实现与注释
1 | //声明全局变量 |
问题二:LeetCode-753 破解保险箱
有一个需要密码才能打开的保险箱。密码是 n
位数, 密码的每一位是 k
位序列 0, 1, ..., k-1
中的一个 。
你可以随意输入密码,保险箱会自动记住最后 n
位输入,如果匹配,则能够打开保险箱。
举个例子,假设密码是 "345"
,你可以输入 "012345"
来打开它,只是你输入了 6 个字符.
请返回一个能打开保险箱的最短字符串。
示例1:
1 | 输入: n = 1, k = 2 |
示例2:
1 | 输入: n = 2, k = 2 |
提示:
n
的范围是[1, 4]
。k
的范围是[1, 10]
。k^n
最大可能为4096
。
This is copyright.