給定乙個非負整數n
,找出小於或等於n
的最大的整數,同時這個整數需要滿足其各個位數上的數字是單調遞增。當且僅當每個相鄰位數上的數字x
和y
滿足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
作為待處理的數字,定義迴圈只要能夠繼續取出兩位數就繼續迴圈,這是迴圈的終止條件,此外能夠使用乘法的地方就盡量不要使用除法,在js
中int32
如果不能夠整除則會自動轉雙精度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 時,我們稱這個整數是單調遞增的。由於該數的組成是單調遞增的,所以,但我們檢索到乙個不單調的數字組合的時候,說明最高位一定比下一位要大。這個...