标签:amp 就会 param inf less mon 最大 返回 pre
给一非负整数 N
, 找到小于等于 N 的最大的 单调递增数. (回想一下, 当且仅当每对相邻的数字 x 和 y 满足 x <= y 时, 这个整数才是单调递增数)
N
为范围 [0, 10^9]
内的整数
样例
给出 N
= 10
, 返回 9
给出 N
= 12345
, 返回 12345
给出 N
= 10000
, 返回 9999
1 class Solution { 2 public: 3 /** 4 * @param num: a non-negative integer N 5 * @return: the largest number that is less than or equal to N with monotone increasing digits. 6 */ 7 int monotoneDigits(int num) { 8 // write your code here 9 string s = to_string(num); 10 char before = ‘9‘; 11 int index = s.size()-1; 12 for(int i = s.size()-1; i>=0; --i){//从后往前找到增加最后一对上升数对 13 if(s[i]>before) index = i; 14 before = s[i]; 15 } 16 if(index == s.size()-1) return num;//index没变表示全部升序排列,返回原数 17 while(index>0 && s[index-1] == s[index]) index--;//关键一步,否则会出错,注意越界 18 s[index]--; 19 for(int j = index+1; j<s.size(); ++j) s[j]=‘9‘;//后面的数全部转变为9 20 return stoi(s);//用stoi省去了头部可能的去0操作 21 } 22 };
标签:amp 就会 param inf less mon 最大 返回 pre
原文地址:https://www.cnblogs.com/J1ac/p/8810899.html