
- class Solution {
- public:
- int monotoneIncreasingDigits(int n) {
- string strNum = to_string(n);
- // flag用来标记赋值9从哪里开始
- // 设置为这个默认值,为了防止第二个for循环在flag没有被赋值的情况下执行
- int flag = strNum.size();
-
- for(int i = strNum.size() - 1; i >= 1; i--){
- if(strNum[i] < strNum[i - 1]){
- strNum[i - 1]--;
- flag = i;
- }
- }
-
- for(int i = flag; i < strNum.size(); i++) strNum[i] = '9';
- return stoi(strNum);
- }
- };

- //定义: 0:该节点无覆盖 1:本节点有摄像头 2:本节点有覆盖!!!
- class Solution {
- public:
- int minCameraCover(TreeNode* root) {
- int cnt = 0;
- if(traversal(root, cnt) == 0) cnt++; //注意还需要判断根节点是否有覆盖!!!
- return cnt;
- }
-
- int traversal(TreeNode* root, int& cnt){
- if(root == nullptr) return 2;
-
- int left = traversal(root->left, cnt);
- int right = traversal(root->right, cnt);
-
- if(left == 0 || right == 0) {cnt++; return 1;}
- else if(left == 1 || right == 1) return 2;
- else return 0;
-
- // 以下是错误的逻辑!!!
- // if(left == 1 || right == 1) return 2;
- // else if(left ==2 && right ==2) return 0;
- // else {cnt++; return 1;}
- }
- };