目录
738 单调递增的数字
class Solution {
public:
int monotoneIncreasingDigits(int n) {
string str = to_string(n);
int flag = str.size();
//因为i和i-1进行比较,所以i不能等0
for(int i = str.size()-1; i > 0; i--){
if(str[i-1] > str[i]){//前一个值比后一个值大
str[i-1] = str[i-1]-1;//-1就够
flag = i;//记录后值的下标,然后把flag后面的值全变成9
}
}
for(int i = flag; i < str.size(); i++){
str[i] = '9';
}
return stoi(str);
}
};
968 监控二叉树
class Solution {
public:
int result;//记录要几个监控
//注意我们的返回值代表的是上一个节点的状态,不是监控数
int traversal(TreeNode* root){
if(root == NULL) return 2;//表示已覆盖,这样才能让叶子节点的父节点赋为1符合我们的逻辑
int left = traversal(root->left);//左
int right = traversal(root->right);//右
//接下来就是通过孩子节点来判断我们父节点的状态了
//1 左右两边都是有覆盖的
if(left == 2 && right == 2) return 0;
//2 左右两边有一个是无覆盖
if(left == 0 || right == 0) {
result++;//孩子节点出现无覆盖的情况,就让父节点加上监控,覆盖子节点
return 1;
}
//3 左右孩子是监控
if(left == 1 || right == 1){
return 2;//让父节点变成被覆盖的情况
}
return -1;
}
int minCameraCover(TreeNode* root) {
result = 0;
//4 如果根节点是无覆盖的情况,那么需要单独给根节点设一个监控
if(traversal(root) == 0){
result++;
}
return result;
}
};