您的位置:首页 > 其它

Leetcode算法学习日志-738 Monotone Increasing Digits

2018-01-24 11:39 399 查看

Leetcode 738 Monotone Increasing Digits

题目原文

Given a non-negative integer
N
, find the largest number that is less than or equal to
N
with monotone increasing digits.

(Recall that an integer has monotone increasing digits if and only if each pair of adjacent digits
x
and
y
satisfy
x <= y
.)

Example 1:

Input: N = 10
Output: 9

Example 2:

Input: N = 1234
Output: 1234

Example 3:

Input: N = 332
Output: 299

Note:
N
is an integer in the range
[0, 10^9]
.

题意分析

给定一个数N,寻找一个小于等于N的数使得这个数的每一位从左到右递增。

解法分析

本题使用贪心策略,从右向左看,如果遇到s[i-1]>s[i],则将s[i-1],同时将右方的数都变成‘9’,这样能保证最大,继续向左遍历,遇到上述情况有同样操作。本代码中从左向右遍历,遇到上述情况,记录相应i,再往左查找,直到s[i-1]<s[i]-1,此时将i右边的位全部置为9,同时s[i]--。C++代码如下:

class Solution {
public:
int monotoneIncreasingDigits(int N) {
if(N>=0&&N<=9)
return N;
string sn=to_string(N);
int i;
for(i=0;i<sn.size()-1;i++){
if(sn[i]>sn[i+1])
break;
}
if(i==sn.size()-1)
return N;
int j;
for(j=i;j>0;j--){
if((sn[j]-1)<sn[j-1])
continue;
else
break;
}
sn[j]=sn[j]-1;
int k;
for(k=j+1;k<sn.size();k++)
sn[k]='9';
int res=stoi(sn);
return res;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: