738.单调递增的数字
题目链接:738. 单调递增的数字 - 力扣(LeetCode)
文章链接:代码随想录 (programmercarl.com)
视频链接:贪心算法,思路不难想,但代码不好写!LeetCode:738.单调自增的数字
这道题第一眼其实思路不好找。我们找一个数字分析一下。
554它的单调递增的最大数字是499.怎么来的呢?
我们可以从后往前看。4比第二个5小,如果要递增,个位上的数字一定要比十位上的大,又要最大,所以个位上的数字用最大的9,十位上减1就可以了。所以就变成了549.
再比较十位和百位,同理,就变成了499了。
贪心算法就出来了,从后往前遍历,只要比前面一位小,就变为9.
代码如下:
class Solution {
public:
int monotoneIncreasingDigits(int n) {
string strnum=to_string(n);//int类型转为string类型
int flat=strnum.size();//flat进行标记
for(int i=strnum.size()-1;i>0;i--)
{
if(strnum[i-1]>strnum[i])
{
flat=i;
strnum[i-1]--;
}
}
for(int i=flat;i<strnum.size();i++)//将flat后的所以元素都变为9
{
strnum[i]='9';
}
return stoi(strnum);
}
};
总结