Lintcode 743 單調遞增的數字

2021-08-28 22:29:55 字數 788 閱讀 9721

給一非負整數n, 找到小於等於 n 的最大的 單調遞增數. (回想一下, 當且僅當每對相鄰的數字 x 和 y 滿足 x <= y 時, 這個整數才是單調遞增數)

自己思路:自己寫的比較醜陋,就不貼出來了,其實就是把所有情況判斷出來,然後挑選符合條件的

dalao思路:要找到從後往前遍歷的最後乙個值公升高的位置,讓前一位減1,並把當前位以及後面的所有位都變成9,就可以得到最大的單調遞增數啦。

就是找到第乙個降序的相鄰數字,因為這是借位的地方

這道題給了我們乙個非負數,讓我們求乙個數字小於等於給定數字,且該數字各位上的數字是單調遞增的。

那麼我們就來分析題目中給的幾個例子吧,首先如果是10的話,我們知道1大於0,所以不是單調自增的,那麼返回的數就是9。

第二個例子是1234,各位上已經滿足單調自增的條件了,返回原數即可。第三個例子是332,我們發現最後一位2小於之前的3,

那麼此時我們將前面位減1,先變成322,再往前看,還是小於前面的3,那麼我們再將前面位減1,就變成了222,此時222不是最大的單調遞增數,

我們可以將後面兩位變成9,於是乎就有了299,小於給定的332,符合題意。如果給定的數字是232,那麼就會得到229,我們可以發現規律,

要找到從後往前遍歷的最後乙個值公升高的位置,讓前一位減1,並把當前位以及後面的所有位都變成9,就可以得到最大的單調遞增數啦。

public int monotonedigits2(int num) else

}for(int i=j;isummary: 從前往後的規律比較複雜(我就是這樣),不如從後往前找規律/最佳策略

LintCode 743 單調遞增的數字

給一非負整數n,找到小於等於 n 的最大的 單調遞增數.回想一下,當且僅當每對相鄰的數字 x 和 y 滿足 x y 時,這個整數才是單調遞增數 注意事項 n為範圍 0,10 9 內的整數 樣例 給出n 10,返回9 給出n 12345,返回12345 給出n 10000,返回9999 思路 從後往前...

單調遞增的數字

給定乙個非負整數n,找出小於或等於n的最大的整數,同時這個整數需要滿足其各個位數上的數字是單調遞增。當且僅當每個相鄰位數上的數字x和y滿足x y時,我們稱這個整數是單調遞增的。輸入 n 10 輸出 9輸入 n 1234 輸出 1234輸入 n 332 輸出 299 param n return va...

單調遞增的數字

給定乙個非負整數 n,找出小於或等於 n 的最大的整數,同時這個整數需要滿足其各個位數上的數字是單調遞增。當且僅當每個相鄰位數上的數字 x 和 y 滿足 x y 時,我們稱這個整數是單調遞增的。輸入 n 332,輸出 299 貪心思路 要使目標數字和 n 最接近,則需要盡可能保持高位數字不動 若某高...