描述
給定乙個非負整數 n,找出小於或等於 n 的最大的整數,同時這個整數需要滿足其各個位數上的數字是單調遞增。
(當且僅當每個相鄰位數上的數字 x 和 y 滿足 x <= y 時,我們稱這個整數是單調遞增的。)
示例 1:
輸入: n = 10
輸出: 9
示例 2:
輸入: n = 1234
輸出: 1234
示例 3:
輸入: n = 332
輸出: 299
說明: n 是在 [0, 10^9] 範圍內的乙個整數。
思路從後往前掃瞄,如果發現前乙個數比較大,那我們可以將前乙個數-1,然後將之後都改為9,然後我們重複這個過程,就能夠找到這個數字了。
舉例,33322
33299
32999
29999
注意:直接找到遞增的子串行,然後將子串行最後一位減1,後補9,這是不行的,反例就是33322,按照這個思路結果為33299。
class
solution
}for
(int i=p;i)s[i]
='9'
;return
stoi
(s);}}
;
參考: leetCode 738 單調遞增的數字
給定乙個非負整數 n,找出小於或等於 n 的最大的整數,同時這個整數需要滿足其各個位數上的數字是單調遞增。當且僅當每個相鄰位數上的數字 x 和 y 滿足 x y 時,我們稱這個整數是單調遞增的。示例 1 輸入 n 10輸出 9示例 2 輸入 n 1234 輸出 1234示例 3 輸入 n 332輸出...
LeetCode 738 單調遞增的數字
給定乙個非負整數 n,找出小於或等於 n 的最大的整數,同時這個整數需要滿足其各個位數上的數字是單調遞增。當且僅當每個相鄰位數上的數字 x 和 y 滿足 x y 時,我們稱這個整數是單調遞增的。示例 1 輸入 n 10 輸出 9 示例 2 輸入 n 1234 輸出 1234 示例 3 輸入 n 33...
LeetCode738單調遞增的數字
看到題目就想到了應該使用貪心,但是怎麼貪心卻不是很容易構思,分析一下題意,要找的是小於n的最大的數,並且這個數滿足從最高位到最低為非嚴格遞增 x y叫做非嚴格遞增 因為數字要求滿足的性質是對數的每一位的要求,所以考慮按照從每一位來構造。因為9是一位數字的最大值,所以如果從某一位向後全是9,在他之前的...