当前位置: 首页 > article >正文

代码随想录算法训练营第23期day36|738.单调递增的数字、968.监控二叉树

目录

一、(leetcode 738)单调递增的数字

二、(leetcode 968)监控二叉树


一、(leetcode 738)单调递增的数字

力扣题目链接

状态:查看思路Debug后AC。

暴力方法肯定是超时,因此需要逐位进行判断:如果i-1的数字大于i的位置,就把i处的值变为9,i-1处的值减一。这个方法从局部出发,如果说想要从这个局部最优扩展到全局最优,需要使全局最优的答案可以复用局部最优,就只能从后往前判断而不是从前往后,和重叠区间有一点点逻辑上的类似,但是不好描述,用心体会。

class Solution {
public:
    int monotoneIncreasingDigits(int n) {
        string number = to_string(n);
        int len = number.size(), flag = len;
        // flag从后向前遍历,确定从哪里开始向后替换为9
        for(int i = len-1; i > 0; --i){
            if(number[i-1] > number[i]){
                flag = i;
                number[i-1]--;
            }
        }
        for(int i = flag; i < len; ++i){
            number[i] = '9';
        }
 
        return stoi(number);
    }
};

二、(leetcode 968)监控二叉树

力扣题目链接

状态:查看思路后AC,可能会遗忘。

这道题最重要的第一步就是知道要从哪里出发进行判断,根据这个方向再确定二叉树的遍历序列,再进行逻辑设计。所以应该是从叶子结点出发,将叶子节点的父节点装上摄像头,根据这个方向,可以使用左右中的递归顺序,这样可以在回溯的时候对中间节点进行逻辑判断,为此我们需要对每个节点的状态进行讨论,可以用3钟状态来描述:无覆盖0,有摄像头1,被覆盖2。需要注意的是空节点的状态应该是2。具体的逻辑分析参考代码,最后需要再额外对根节点进行判断,总体而言是个很难的问题,需要多多体会巩固。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    int res;
    int traversal(TreeNode* root){
        if(root == nullptr) return 2;
        int left = traversal(root->left);
        int right = traversal(root->right);
 
        // 逻辑判断
        if(left == 2 && right == 2){
            return 0;
        }else if(left == 0 || right == 0){
            res++;
            return 1;
        }else if(left == 1 || right == 1){
            return 2;
        }
 
        return -1;
    }
    int minCameraCover(TreeNode* root) {
        res = 0;
        if(traversal(root) == 0){
            res++;
        }
        return res;
    }
};

http://www.kler.cn/a/108552.html

相关文章:

  • linux上海康SDK安装并设置环境变量
  • 动态规划问题-删除并获得点数(Java实现)
  • React中 修改 html字符串 中某些元素的属性
  • Rocky、Almalinux、CentOS、Ubuntu和Debian系统初始化脚本v9版
  • Gartner发布安全平台创新洞察:安全平台需具备的11项常见服务
  • neo4j desktop基本入门
  • request、response请求转发和重定向
  • C++面试题库
  • el-date-picker日期选择器奇怪的问题解决
  • github搜索技巧探索
  • 人工智能与航天技术的融合:未来发展的新趋势
  • 2015年亚太杯APMCM数学建模大赛B题城市公共交通服务水平动态评价模型求解全过程文档及程序
  • java spring boot 字符串判空
  • 黔院长 | 一文了解五脏的脏象!
  • 【计算机网络】(谢希仁第八版)第二章课后习题答案
  • PHP危险函数
  • Qt之实现支持多选的QCombobox
  • MySQL安装『适用于 CentOS 7』
  • 防止消息丢失与消息重复——Kafka可靠性分析及优化实践
  • 微机原理:汇编语言程序设计
  • 两数之和(C++解法)
  • 【Oracle】Navicat Premium 连接 Oracle的两种方式
  • 分类预测 | Matlab实现KOA-CNN-GRU-selfAttention多特征分类预测(自注意力机制)
  • Python——新建工程/引入本地库
  • 基于PHP的仓库库存管理系统设计与实现(源码+lw+部署文档+讲解等)
  • 【VR开发】【Unity】【VRTK】1-无代码VRVR开发介绍