738. 单调递增的数字
把递减的部分向前借一位,全填9
class Solution {
public:
// 把后面的数字换成9
int monotoneIncreasingDigits(int n) {
string s = to_string(n);
int flag = s.size();
for (int i = s.size() - 1; i > 0; i --)
{
if (s[i] < s[i-1])
{
s[i-1] --;
flag = i;
}
}
for (int i = flag; i < s.size(); i ++)
s[i] = '9';
return stoi(s);
}
};
968. 监控二叉树
叶子节点的上一层放摄像头
整体是 无有无
0表示无覆盖,1表示摄像头,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 = 0;
// 叶子节点不放摄像头,往上推
int minCameraCover(TreeNode* root) {
if (dfs(root) == 0)
res ++;
return res;
}
int dfs(TreeNode* root)
{
if (root == nullptr) return 2;
int left = dfs(root->left);
int right = dfs(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;
}
};