單調遞增的數字

2022-01-10 08:39:41 字數 1243 閱讀 3372

給定乙個非負整數n,找出小於或等於n的最大的整數,同時這個整數需要滿足其各個位數上的數字是單調遞增。當且僅當每個相鄰位數上的數字xy滿足x <= y時,我們稱這個整數是單調遞增的。

輸入: n = 10

輸出: 9

輸入: n = 1234

輸出: 1234

輸入: n = 332

輸出: 299

/**

* @param n

* @return

*/var monotoneincreasingdigits = function(n)

return num;

};

整體思路就是將數字當作字串,從尾到頭逆向遍歷一遍,每次比較兩位,如果後乙個位置上的數小於前乙個位置上的數,那麼就將前邊的數減一,並將後邊的所有位都變為9,例如當我們遍歷到了1323中比較32的這個位置上,此時3 > 2符合條件,那麼我們就將3減一併將其後的數都變作9,即將其變為1299,直到遍歷到頭即可。通常來說可以把數字作為字串來遍歷處理,上面的題解是使用純數字的方式去做,首先定義i作為標記記錄遍歷到到的位置,之後定義num作為待處理的數字,定義迴圈只要能夠繼續取出兩位數就繼續迴圈,這是迴圈的終止條件,此外能夠使用乘法的地方就盡量不要使用除法,在jsint32如果不能夠整除則會自動轉雙精度64,所以在很多地方都需要強制轉數值為int32,之後取出兩位數,這裡~~是使用位運算強制轉了整型,在之後將i * 10定義到下一位,如果低一位上的值大於大於高一位上的值,那麼就將數值在第i位以後的值都變成0,然後減1即可達到上述的將此位減1以及之後的數字都變為9,可以參考上邊的示例,在迴圈結束後返回處理的數字即可。

單調遞增的數字

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

738 單調遞增的數字

738.單調遞增的數字 給定乙個非負整數n,找出小於或等於n的最大的整數,同時這個整數需要滿足其各個位數上的數字是單調遞增。示例 1 輸入 n 10 輸出 9 示例 2 輸入 n 1234 輸出 1234 示例 3 輸入 n 332 輸出 299 說明 n 是在 0,10 9 範圍內的乙個整數。基本...

Leetcode 單調遞增的數字

給定乙個非負整數 n,找出小於或等於 n 的最大的整數,同時這個整數需要滿足其各個位數上的數字是單調遞增。當且僅當每個相鄰位數上的數字 x 和 y 滿足 x y 時,我們稱這個整數是單調遞增的。由於該數的組成是單調遞增的,所以,但我們檢索到乙個不單調的數字組合的時候,說明最高位一定比下一位要大。這個...