1. 单调递增的数字
当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。
给定一个整数 n ,返回 小于或等于 n 的最大数字,且数字呈 单调递增 。
int monotoneIncreasingDigits(int n) {
string strNum = to_string(n);
// flag用来标记9从哪里开始
int flag = strNum.size();
for(int i=strNum.size()-1; i>0; i--){
if(strNum[i-1] > strNum[i]){
flag = i;
strNum[i-1]--;
}
}
for(int i=flag; i < strNum.size(); i++){
strNum[i] = '9';
}
return stoi(strNum);
}
2.监控二叉树(困难)
- LeetCode链接
给定一个二叉树,我们在树的节点上安装摄像头。
节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。
计算监控树的所有节点所需的最小摄像头数量。
/**
* 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 result = 0;
int travel(TreeNode* node){
if(node == NULL){
return 2; // 空节点
}
int left = travel(node->left);
int right = travel(node->right);
if(left == 2 && right == 2){ // 左右节点都为叶子节点下的空节点
return 0;
}
else if(left == 0 || right == 0){
result ++;
return 1;
}else{
return 2;
}
}
int minCameraCover(TreeNode* root) {
if(root == NULL) return 0;
int cur = travel(root);
if(cur == 0){ // 如果父节点没有被覆盖
result ++;
}
return result;
}
};