皇位继承顺序
力扣 1600. 皇位继承顺序
题目说明
一个王国里住着国王、他的孩子们、他的孙子们等等。每一个时间点,这个家庭里有人出生也有人死亡。
这个王国有一个明确规定的皇位继承顺序,第一继承人总是国王自己。我们定义递归函数
Successor(x, curOrder),给定一个人x和当前的继承顺序,该函数返回x的下一继承人。1
2
3
4
5Successor(x, curOrder):
如果 x 没有孩子或者所有 x 的孩子都在 curOrder 中:
如果 x 是国王,那么返回 null
否则,返回 Successor(x 的父亲, curOrder)
否则,返回 x 不在 curOrder 中最年长的孩子比方说,假设王国由国王,他的孩子 Alice 和 Bob (Alice 比 Bob 年长)和 Alice 的孩子 Jack 组成。
- 一开始,
curOrder为["king"]. - 调用
Successor(king, curOrder),返回 Alice ,所以我们将 Alice 放入curOrder中,得到["king", "Alice"]。 - 调用
Successor(Alice, curOrder),返回 Jack ,所以我们将 Jack 放入curOrder中,得到["king", "Alice", "Jack"]。 - 调用
Successor(Jack, curOrder),返回 Bob ,所以我们将 Bob 放入curOrder中,得到["king", "Alice", "Jack", "Bob"]。 - 调用
Successor(Bob, curOrder),返回null。最终得到继承顺序为["king", "Alice", "Jack", "Bob"]。
通过以上的函数,我们总是能得到一个唯一的继承顺序。
请你实现
ThroneInheritance类:ThroneInheritance(string kingName)初始化一个ThroneInheritance类的对象。国王的名字作为构造函数的参数传入。void birth(string parentName, string childName)表示parentName新拥有了一个名为childName的孩子。void death(string name)表示名为name的人死亡。一个人的死亡不会影响Successor函数,也不会影响当前的继承顺序。你可以只将这个人标记为死亡状态。string[] getInheritanceOrder()返回 除去 死亡人员的当前继承顺序列表。
- 一开始,
示例
1 | 输入: |
笔者理解
此题是一道哈希算法问题,在力扣题库中被定义为中等题。
解法
当笔者阅读完此题后,发现此题只需要注意王位的继承制度是嫡长子继承制即可,让我们来看看具体如何实现的吧。
实现
1 | class ThroneInheritance { |
时间效率和空间效率都还行,可见此解法还比较适合此题;
总结
本题是今天的每日一题,难度是为中等,感兴趣的朋友都可以去尝试一下,此题还有其他更多的解法,朋友们可以自己逐一尝试。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 徐年の博客!









