算法刷题 DAY37

738.单调自增的数字

int monotoneIncreasingDigits(int n) {

    char s[11]={'\0'};
    sprintf(s,"%d",n);//整数转字符串方便进行各位上的遍历
    int len=strlen(s);
    int flag=len;//若flag未更新过则没有赋值为9的操作

    for(int i=len-1;i>0;i--){//遍历到第二位截至
        if(s[i-1]>s[i]){
            s[i-1]--;//减一后必定小于
            flag=i;//此处及右边都要赋为9
        }
    }

    for(int i=flag;i<len;i++){
        s[i]='9';//字符9而非数字9
    }

    int res=atoi(s);//转整数

    return res;
    
}

968.监督二叉树

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */

/**
     节点的状态值:
       0 表示无覆盖
       1 表示 有摄像头
       2 表示有覆盖
    后序遍历,根据左右节点的情况,来判读 自己的状态
     */

int res;//全局

int last_order(struct TreeNode* root){

    if(!root) return 2;//空结点视为有覆盖→忽略

    int left=last_order(root->left);
    int right=last_order(root->right);

    if(left==2&&right==2) return 0;//左右孩子都有覆盖右→在父结点的父结点安装摄像头
    if(left==0||right==0){//有一个孩子未被覆盖→必须安装摄像头
        res++;
        return 1;
    }
    if(left==1||right==1) return 2;//孩子至少一个有摄像头→该节点必定会被覆盖

    return -1;//前面三个if已经包含所有情况;cpp语法没else的情况下不加return会报编译错误
 
}

int minCameraCover(struct TreeNode* root) {

    res=0;
    if(last_order(root)==0) res++;//情况四:根节点未被覆盖时,则在根节点加个摄像头:因为没有父结点了

    return res;
    
}

  • 11
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值