首页 > 编程语言 >算法学习day37贪心part06-738、968

算法学习day37贪心part06-738、968

时间:2023-05-31 20:01:38浏览次数:41  
标签:right TreeNode val int day37 968 part06 节点 left

package LeetCode.greedypart06;
/**
 * 738. 单调递增的数字
 * 当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y时,我们称这个整数是单调递增的。
 * 给定一个整数 n ,返回 小于或等于 n 的最大数字,且数字呈 单调递增 。
 * 示例:
 * 输入: n = 332
 * 输出: 299
 * */

public class MonotoneIncreasingDigits_738 {
    public static void main(String[] args) {
        int num = 332;
        int result = monotoneIncreasingDigits(num);
        System.out.println(result);
    }
    public static int monotoneIncreasingDigits(int n) {
        String s = String.valueOf(n);
        char[] chars = s.toCharArray();
        int start = s.length();
        for (int i = s.length() - 2; i >= 0; i--) {
            if (chars[i] > chars[i + 1]) {
                chars[i]--;
                start = i+1;
            }
        }
        for (int i = start; i < s.length(); i++) {
            chars[i] = '9';
        }
        return Integer.parseInt(String.valueOf(chars));
    }

}
package LeetCode.greedypart06;
/**
 * 968. 监控二叉树
 * 给定一个二叉树,我们在树的节点上安装摄像头。节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。
 * 计算监控树的所有节点所需的最小摄像头数量。
 * 输入:[0,0,null,0,0]
 * 输出:1
 * */
class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode() {}
    TreeNode(int val) { this.val = val; }
    TreeNode(int val, TreeNode left, TreeNode right) {
        this.val = val;
        this.left = left;
        this.right = right;
    }
}

public class BinaryTreeCameras_968 {
    public static void main(String[] args) {

    }
    int  res=0;
    public int minCameraCover(TreeNode root) {
        // 对根节点的状态做检验,防止根节点是无覆盖状态 .
        if(minCame(root)==0){
            res++;
        }
        return res;
    }
    /**
     节点的状态值:
     0 表示无覆盖
     1 表示 有摄像头
     2 表示有覆盖
     后序遍历,根据左右节点的情况,来判读 自己的状态
     */
    public int minCame(TreeNode root){
        if(root==null){
            // 空节点默认为 有覆盖状态,避免在叶子节点上放摄像头
            return 2;
        }
        int left=minCame(root.left);
        int  right=minCame(root.right);

        // 如果左右节点都覆盖了的话, 那么本节点的状态就应该是无覆盖,没有摄像头
        if(left==2&&right==2){
            //(2,2)
            return 0;
        }else if(left==0||right==0){
            // 左右节点都是无覆盖状态,那 根节点此时应该放一个摄像头
            // (0,0) (0,1) (0,2) (1,0) (2,0)
            // 状态值为 1 摄像头数 ++;
            res++;
            return 1;
        }else{
            // 左右节点的 状态为 (1,1) (1,2) (2,1) 也就是左右节点至少存在 1个摄像头,
            // 那么本节点就是处于被覆盖状态
            return 2;
        }
    }

}

 

标签:right,TreeNode,val,int,day37,968,part06,节点,left
From: https://www.cnblogs.com/lipinbigdata/p/17447179.html

相关文章

  • 算法学习day30回溯part06-332、51、37
    packageLeetCode.backtrackpart06;importjava.util.ArrayList;importjava.util.Collections;importjava.util.LinkedList;importjava.util.List;/***332.重新安排行程*给你一份航线列表tickets,其中tickets[i]=[fromi,toi]表示飞机出发和降落的机场地点......
  • 968. 监控二叉树
    给定一个二叉树,我们在树的节点上安装摄像头。节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。计算监控树的所有节点所需的最小摄像头数量。示例1:输入:[0,0,null,0,0]输出:1解释:如图所示,一台摄像头足以监控所有节点。我的解法classSolution{private:......
  • 每日一练 | 华为认证真题练习Day37
    1、缺省情况下,STP协议中的端口状态由Disabled转化为forwarding状态至少需要30s的时间。A.对B.错2、在路由表中存在到达同一个目的网络的多个NextHop,这些路由称之为?A.等价路由B.默认路由C.多径路由D.次优路由3、OSPF协议在以下哪种网络类型中需要选举DR和BDR?(多选)A.点到点类型......
  • IC99680: SEGMENTATION FAULT AND CRASH DURING DSMSERV FORMAT COMMAND
      APARstatusClosedasprogramerror. ErrordescriptionThedsmservformatprocesscancrashwithasegmentationfaultwheninitiatedbyanadministratorduringmanualinstanceconfiguration.Forexample:$/opt/tivoli/tsm/serv......
  • day37| 738+968
    738.单调递增的数字 题目简述:当且仅当每个相邻位数上的数字 x 和 y 满足 x<=y 时,我们称这个整数是单调递增的。给定一个整数n,返回小于或等于n的最大数字,且数字呈单调递增。 思路:1.记ns[i]表示数字n从高到低的第i位的数字,i从0开始2.从左到右寻找,找到的......
  • day37(2023.4.6)
    1.数据结构简介 2. 线性结构线性结构 栈结构  栈的定义栈是一种只能从一端存取数据且遵循"后进先出(LIFO)"原则的线性存储结构。实现栈容器: 运行结果: 3.链表结构 4.实现单项链表  运行结果: 5.实现双向链表双向链表也叫双链表,是链表的一种......
  • 聊聊Python中的GIL https://www.cnblogs.com/ArsenalfanInECNU/p/9968621.html
    抄自:https://www.cnblogs.com/ArsenalfanInECNU/p/9968621.htmlGIL的全称是GlobalInterpreterLock,全局解释器锁。因为Python的执行依赖于解释器。Python最初的设计理......
  • 算法随想Day37【动态规划】| LC416-分割等和子集
    动态规划五部曲确定dp[i]的含义dp递推公式dp数组如何初始化确认dp数组遍历顺序打印dp数组,主要用于调试LC416.分割等和子集这道题是“背包问题”的应用,但其实不好......
  • 代码随想录算法Day37 | 738.单调递增的数字
    738.单调递增的数字题目链接:738.单调递增的数字-力扣(LeetCode)思路将数字转换成字符数组形式,然后从后向前遍历,当遇到当前这个数大于后一个数的时候,这个数减一,他的后一......
  • 代码随想录算法训练营第三十六天 | 738.单调递增的数字,714. 买卖股票的最佳时机含手续
    Day36周日休息~一、参考资料单调递增的数字https://programmercarl.com/0738.%E5%8D%95%E8%B0%83%E9%80%92%E5%A2%9E%E7%9A%84%E6%95%B0%E5%AD%97.html买卖股票的......