738. 單調(diào)遞增的數(shù)字(Python)

難度:★★★☆☆
類型:數(shù)組
方法:數(shù)學(xué)

力扣鏈接請移步本題傳送門
更多力扣中等題的解決方案請移步力扣中等題目錄

給定一個非負整數(shù) N,找出小于或等于 N 的最大的整數(shù),同時這個整數(shù)需要滿足其各個位數(shù)上的數(shù)字是單調(diào)遞增。

(當且僅當每個相鄰位數(shù)上的數(shù)字 x 和 y 滿足 x <= y 時,我們稱這個整數(shù)是單調(diào)遞增的。)

示例 1:

輸入: N = 10
輸出: 9

示例 2:

輸入: N = 1234
輸出: 1234

示例 3:

輸入: N = 332
輸出: 299
說明: N 是在 [0, 10^9] 范圍內(nèi)的一個整數(shù)。

解答

需要經(jīng)過兩次遍歷。

第一次遍歷,從最高位開始,尋找連續(xù)非遞減子串的最大長度,找到不再連續(xù)非遞減的位置。

第二次遍歷,從第一次遍歷找到的分界點開始向左遍歷,做退位相減,直到最高位。

最后,將分界點以后的所有位置成9即可。

class Solution(object):
    def monotoneIncreasingDigits(self, N):
        S = list(map(int, str(N)))

        i = 0
        while i < len(S) - 1 and S[i] <= S[i+1]:
            i += 1
        while 0 <= i < len(S) - 1 and S[i] > S[i+1]:
            S[i] -= 1
            i -= 1
        S[i+2:] = [9] * (len(S) - i - 2)
        return int("".join(map(str, S)))

如有疑問或建議,歡迎評論區(qū)留言~

有關(guān)更多力扣中等題的python解決方案,請移步力扣中等題解析

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容