給一非負整數n
, 找到小於等於 n 的最大的 單調遞增數. (回想一下, 當且僅當每對相鄰的數字 x 和 y 滿足 x <= y 時, 這個整數才是單調遞增數)
注意事項
n
為範圍[0, 10^9]
內的整數
樣例
給出n
=10
, 返回9
給出n
=12345
, 返回12345
給出n
=10000
, 返回9999
思路:從後往前找到最後上公升的兩個數,然後將這兩個數裡面前面乙個數-1,後面的數全部改成9就行了,這個處理string比較好操作一點,所以這裡我經過了int和string的轉變處理,直接int上操作要用%10然後多一些細節,需要注意的是這樣的兩個數找到之後需要繼續往前搜尋是否存在相同的數,找到最前面的數然後減一,否則就會出錯,可以考慮範例中的111111110。
1class
solution
16if(index == s.size()-1) return num;//
index沒變表示全部公升序排列,返回原數
17while(index>0 && s[index-1] == s[index]) index--;//
關鍵一步,否則會出錯,注意越界
18 s[index]--;
19for(int j = index+1; j'
9';//
後面的數全部轉變為9
20return stoi(s);//
用stoi省去了頭部可能的去0操作21}
22 };
Lintcode 743 單調遞增的數字
給一非負整數n,找到小於等於 n 的最大的 單調遞增數.回想一下,當且僅當每對相鄰的數字 x 和 y 滿足 x y 時,這個整數才是單調遞增數 自己思路 自己寫的比較醜陋,就不貼出來了,其實就是把所有情況判斷出來,然後挑選符合條件的 dalao思路 要找到從後往前遍歷的最後乙個值公升高的位置,讓前一...
單調遞增的數字
給定乙個非負整數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 最接近,則需要盡可能保持高位數字不動 若某高...