• [Swift]LeetCode968.监控二叉树 | Binary Tree Cameras


    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址:https://www.cnblogs.com/strengthen/p/10201562.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    Given a binary tree, we install cameras on the nodes of the tree. 

    Each camera at a node can monitor its parent, itself, and its immediate children.

    Calculate the minimum number of cameras needed to monitor all nodes of the tree.

    Example 1:

    Input: [0,0,null,0,0]
    Output: 1
    Explanation: One camera is enough to monitor all nodes if placed as shown.
    

    Example 2:

    Input: [0,0,null,0,null,0,null,null,0]
    Output: 2
    Explanation: At least two cameras are needed to monitor all nodes of the tree. The above image shows one of the valid configurations of camera placement.

    Note:

    1. The number of nodes in the given tree will be in the range [1, 1000].
    2. Every node has value 0.

    给定一个二叉树,我们在树的节点上安装摄像头。

    节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。

    计算监控树的所有节点所需的最小摄像头数量。

    示例 1:

    输入:[0,0,null,0,0]
    输出:1
    解释:如图所示,一台摄像头足以监控所有节点。
    

    示例 2:

    输入:[0,0,null,0,null,0,null,null,0]
    输出:2
    解释:需要至少两个摄像头来监视树的所有节点。 上图显示了摄像头放置的有效位置之一。
    


    提示:

      1. 给定树的节点数的范围是 [1, 1000]
      2. 每个节点的值都是 0。

     52ms

     1 /**
     2  * Definition for a binary tree node.
     3  * public class TreeNode {
     4  *     public var val: Int
     5  *     public var left: TreeNode?
     6  *     public var right: TreeNode?
     7  *     public init(_ val: Int) {
     8  *         self.val = val
     9  *         self.left = nil
    10  *         self.right = nil
    11  *     }
    12  * }
    13  */
    14 class Solution {
    15     func minCameraCover(_ root: TreeNode?) -> Int {
    16         var ans:[Int] = mh(root)
    17         return min(ans[1], ans[2])
    18     }
    19     
    20     func mh(_ ro:TreeNode?)-> [Int]
    21     {
    22         if ro == nil
    23         {
    24             var ans:[Int] = [Int](repeating:0,count:3)
    25             ans[1] = 1000000
    26             return ans
    27         }
    28         var l:[Int] = mh(ro!.left)
    29         var r:[Int] = mh(ro!.right)
    30         var ans:[Int] = [Int](repeating:0,count:3)
    31         ans[0] = l[2] + r[2];
    32         ans[1] = 1000000;
    33         ans[2] = 1000000;
    34         for i in 0..<3
    35         {
    36             for j in 0..<3
    37             {
    38                 ans[1] = min(ans[1], l[i]+r[j]+1)
    39             }
    40             if i==0 {continue}
    41             ans[2] = min(ans[2], l[1]+r[i])
    42             ans[2] = min(ans[2], l[i]+r[1])
    43         }
    44         return ans
    45     }
    46 }
     
  • 相关阅读:
    Python文件的两种用途
    模块的搜索路径
    循环导入问题
    import和from...import
    模块的四种形式
    函数小结
    面向过程编程
    内置函数
    匿名函数
    递归
  • 原文地址:https://www.cnblogs.com/strengthen/p/10201562.html
Copyright © 2020-2023  润新知