- 738.单调递增的数字
(1)暴力 超过时间限制
class Solution {
private:
bool isTargetNum(int n) {
int max = 10;
while(n) {
int t = n % 10;
if(t <= max) max = t;
else return false;
n /= 10;
}
return true;
}
public:
int monotoneIncreasingDigits(int n) {
for(int i = n; i >= 0; i--) {
if(isTargetNum(i)) return i;
}
return 0;
}
};
(2) 贪心算法 从后往前遍历
class Solution {
public:
int monotoneIncreasingDigits(int n) {
// 从后向前遍历 记录下 S[i-1] > S[i]时 i的位置 并且把S[i -1]--
string num_s = to_string(n);
int flag = num_s.size(); //9开始的位置
for(int i = num_s.size() - 1; i > 0; i--) {
if(num_s[i - 1] > num_s[i]) {
num_s[i - 1]--;
flag = i;
}
}
for(int i = flag; i < num_s.size(); i++) {
num_s[i] ='9';
}
int res = stoi(num_s);
return res;
}
};
- 714. 买卖股票的最佳时机含手续费
- 968.监控二叉树