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;}
}
};
贪心算法总结
代码随想录 (programmercarl.com)