863. 二叉树中所有距离为 K 的结点
Posted 易小顺
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了863. 二叉树中所有距离为 K 的结点相关的知识,希望对你有一定的参考价值。
算法记录
LeetCode 题目:
在 “100 game” 这个游戏中,两名玩家轮流选择从 1 到 10 的任意整数,累计整数和,先使得累计整数和达到或超过 100 的玩家,即为胜者。
说明
一、题目
你可以假设 maxChoosableInteger 不会大于 20, desiredTotal 不会大于 300。
二、分析
- 也就是一个博弈题,前一个在选完数字之后如果后一个能够成功,那也就意味着输了,说明这条路是不可选取的一个方法。
- 在判断当前选择的数字可以赢时,便继续往下走并记录一下,防止大量的递归探测从而浪费完执行时间。
class Solution
private Map<Integer, Boolean> visit = new HashMap();
public boolean canIWin(int maxChoosableInteger, int desiredTotal)
if((1 + maxChoosableInteger) * maxChoosableInteger / 2 < desiredTotal) return false;
return dfs(0, maxChoosableInteger, desiredTotal);
public boolean dfs(int mask, int maxChoosableInteger, int desiredTotal)
if(visit.get(mask) != null) return visit.get(mask);
for(int i = 1; i <= maxChoosableInteger; i++)
if((mask & (1 << i)) != 0) continue;
if(i >= desiredTotal) return true;
if(!dfs(mask | (1 << i), maxChoosableInteger, desiredTotal - i))
visit.put(mask, true);
return true;
visit.put(mask, false);
return false;
总结
熟悉递归和剪枝策略。
以上是关于863. 二叉树中所有距离为 K 的结点的主要内容,如果未能解决你的问题,请参考以下文章