贪心
一、单调递增的数字
1.首先想到的就是暴力解法,对整数的每一位都进行判断,时间超时
2.98下面最大递增数字为89,298的最大递增数字为289,所以从后往前遍历,如果前一个比当前数字大,则令当前数字为9,前一个-1。也要考虑100,1000这种情况,如果直接再循环内设置数值,可能会出现90,900这种情况,所以使用flag记录需要数字改变为9的位置。
class Solution {
public:
int monotoneIncreasingDigits(int n) {
string nums = to_string(n);
int flag = nums.size();
for (int i = nums.size()-1; i > 0; i--) {
if (nums[i-1] > nums[i]) {
nums[i-1]--;
flag = i;
}
}
for (int i = flag; i < nums.size(); i++) {
nums[i] = '9';
}
return stoi(nums);
}
};
总结
贪心算法没有固定的套路,局部最优推向全局最优,只是一种解题的方法,不能局限在某个套路中。题海多刷才是王道。
学习时间90min。
学习资料:《代码随想录》。