Leetcode算法学习日志-738 Monotone Increasing Digits
2018-01-24 11:39
399 查看
Leetcode 738 Monotone Increasing Digits
题目原文
Given a non-negative integerN, find the largest number that is less than or equal to
Nwith monotone increasing digits.
(Recall that an integer has monotone increasing digits if and only if each pair of adjacent digits
xand
ysatisfy
x <= y.)
Example 1:
Input: N = 10 Output: 9
Example 2:
Input: N = 1234 Output: 1234
Example 3:
Input: N = 332 Output: 299
Note:
Nis 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;
}
};
相关文章推荐
- Leetcode算法学习日志-54 Spiral Matrix
- Leetcode算法学习日志-576 Out of Boundary Paths
- Leetcode算法学习日志-486 Predict the Winner
- Leetcode算法学习日志-399 Evaluate Division
- Leetcode算法学习日志-494 Target Sum
- Leetcode算法学习日志-241 Different Ways to Add Parentheses
- Leetcode算法学习日志-137 Single Number II
- Leetcode算法学习日志-563 Binary Tree Tilt
- Leetcode算法学习日志-737 Sentence Similarity II
- Leetcode算法学习日志-452 Minimum Number of Arrows to Burst Balloons
- Leetcode算法学习日志-553 Optimal Division
- Leetcode算法学习日志-215 Kth Largest Element in an Array
- Leetcode算法学习日志-673 Number of Longest Increasing Subsequence
- Leetcode算法学习日志-561 Array Partition I
- Leetcode算法学习日志-60 Permutation Sequence
- Leetcode算法学习日志-752 Open the Lock
- Leetcode算法学习日志-735 Asteroid Collision
- Leetcode算法学习日志-257 Binary Tree Paths
- Leetcode算法学习日志-447 Number of Boomerangs
- LeetCode算法学习日志-638 Shopping Offers