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;
}