leetcode 738 单调递增的数字 (贪心)
题目描述:
给定一个非负整数 N
,找出小于或等于 N
的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。
题解:
从数字的低位开始向高位遍历,如果低位大于次低位的话,就先不处理。否则从向高一位接一,然后这一位开始到最低位所有值赋为9。代码如下:
class Solution { public: vector<int> get(int x) { vector<int> res; while(x) { res.push_back(x%10); x/=10; } reverse(res.begin(),res.end()); return res; } int monotoneIncreasingDigits(int N) { vector<int> tmp = get(N); int len = tmp.size(); for(int i=len-1;i>0;i--) { if(tmp[i] >= tmp[i-1]) continue; int k = i; for(k ;k<len;k++) tmp[k] = 9; tmp[i-1] --; int l = i - 1; while(l >= 0 && tmp[l] < 0) { tmp[l] = 9; if(l-1 >= 0) tmp[l-1]--; l--; } } int ans= 0; for(int i = 0;i < len ;i++) { ans = ans*10 + tmp[i]; } return ans; } };