738 单调递增的数字
题目
解题思路
- 贪心算法:局部最优-> 全局最优,那么保证一部分最优,进而推出全局最优。
- 此题遍历分为从前往后,从后往前遍历俩种方式。
- 从前往后遍历,如果strNum[i-1] > strNum[i],让strNum[i-1] 减一,但此时strNum[i-1]减一后可能比 strNum[i-2]小,那么就有可能顾头顾不上尾。
- 从后往前遍历, strNum[i-1] > strNum[i],让strNum[i-1] 减一,并且记录减一元素的索引,因为其减一,strNum[i]可以取最大元素9
具体代码
String s = String.valueOf(n);
char[] chars = s.toCharArray();
int start = s.length();
for (int i = s.length() - 2; i >= 0; i--) {
if (chars[i] > chars[i + 1]) {
chars[i]--;
start = i+1;
}
}
for (int i = start; i < s.length(); i++) {
chars[i] = '9';
}
return Integer.parseInt(String.valueOf(chars));