leetcode738. 单调递增的数字(中等)
生活随笔
收集整理的這篇文章主要介紹了
leetcode738. 单调递增的数字(中等)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
思路:貪心
實現細節:從左到右遍歷,遇到第一個將要下降的數字[i]將其減少1,右側的都改成9即可,如果遍歷到末尾了則直接return
這樣可能出現的問題:減1之后,可能[i-1]>[i](即[i-1]和[i]剛開始相等),此時i-1需要減1,直到前面的都滿足遞增,從最左邊-1處右邊都改成’9’
class Solution { public:int monotoneIncreasingDigits(int m) {string s = to_string(m);int n = s.size();int i = 0;while (i < n - 1 && s[i] <= s[i+1]) i++;if (i == n - 1) return m;//這里不太好寫i++; while (i > 0 && s[i - 1] > s[i]) { s[i - 1]--;i--;}//上面這一段不好寫for (int k = i + 1; k < n; ++k) s[k] = '9'; //return stoi(s);} };代碼上的難點:
1:由于是根據前面的值大于當前位置的值,然后把當前位置-1,下標是0時不好寫,i - 1會越界
應該向上面這種寫法:i指向第一個下降了的位置,通過i-1來減,剛開始循環條件必然滿足,循環結束后i指向的是第一個被修改的元素。
2:k從i+1開始,即修改元素的下一個位置開始,都賦為‘9’。
總結
以上是生活随笔為你收集整理的leetcode738. 单调递增的数字(中等)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 估值报告写作第四讲——第五届CVA估值建
- 下一篇: 众包:众筹的另一半