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 的结点的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode 863--二叉树中所有距离为 K 的结点

863. 二叉树中所有距离为 K 的结点

863. 二叉树中所有距离为 K 的结点-DFS

863. 二叉树中所有距离为 K 的结点-DFS

863. 二叉树中所有距离为 K 的结点-DFS

leetcode中等863二叉树中所有距离为 K 的结点