题目1:738 单调递增的数字
题目链接:单调递增的数字
对题目的理解
返回小于或等于n的最大数字,且数字是单调递增(单调递增数字的定义:每个相邻位上的数字满足x<=y)
贪心算法
注意本题的遍历顺序是从后往前遍历
伪代码
代码
cpp
class Solution {
public:
int monotoneIncreasingDigits(int n) {
//将数字转换为字符串
string str = to_string(n);
int flag = str.size();
//从后往前遍历
for(int i=str.size()-1;i>0;i--){
if(str[i]<str[i-1]){
str[i-1]--;
flag = i;//从i往后,都是9
}
}
for(int j = flag;j<str.size();j++){
str[j] = '9';
}
return stoi(str);
}
};
- 时间复杂度:O(n),n 为数字长度
- 空间复杂度:O(n),需要一个字符串,转化为字符串操作更方便
题目2:968 监控二叉树
题目链接:监控二叉树
对题目的理解
节点上安装摄像头,每个摄像头都可以监控其父对象,自身及其直接子对象,求所有节点所需最小摄像头的数量。