738.单调递增的数字
 思路:
 one:
 今天上午一直考慮的是如何循環(huán),從最大值往下找數(shù)字,這樣經(jīng)過無數(shù)次的失敗之后就一定會(huì)找到符合題目要求的數(shù)字,但是,在進(jìn)行測(cè)試時(shí)發(fā)現(xiàn),運(yùn)行超出時(shí)長(zhǎng)限制。
two:
 然后開始探索第二種思路,我發(fā)現(xiàn)了一些規(guī)律,比如
11491537
這個(gè)測(cè)試用例的話,它就是在最大值處-1,然后結(jié)尾補(bǔ)9
 然后我又登上了注定失敗的路途
three:
 我發(fā)現(xiàn)并不是所有的都是在最大值處-1,結(jié)尾補(bǔ)9,比如
418
它是在當(dāng)?shù)诙?lt;第一位時(shí)就需要將第一位-1,結(jié)尾補(bǔ)9
four:
 答案可想而之,還是有測(cè)試點(diǎn)無法通過,比如
99998
five:
 最后我還是總結(jié)一下思路,利用了一個(gè)first指針,來識(shí)別截取的位置
 首先,你會(huì)發(fā)現(xiàn)這道題的特點(diǎn)
 它相鄰兩位的只有三種情況
 一:前一位>后一位
 二:前一位=后一位
 三:前一位<后一位
 真對(duì)這三種情況分別進(jìn)行討論:
 一:前一位>后一位
- 這說明此時(shí)已經(jīng)不符合題目要求,再往后判斷已經(jīng)沒有意義,所以需要記錄前一位的下標(biāo),break
二:前一位=后一位
- 這種情況的話還需要繼續(xù)判斷,比如
339967
- 此時(shí)判斷完33之后并不能代表著結(jié)束,所以需要continue跳過
三:前一位<后一位
- 這種情況需要記錄first的下標(biāo),因?yàn)樗碇?dāng)后面一旦出現(xiàn)不符合條件的值時(shí)可以從first下標(biāo)進(jìn)行-1操作,并在結(jié)尾補(bǔ)9
并且我發(fā)現(xiàn)有first還可以判斷正序的數(shù)字,比如1234,因?yàn)楫?dāng)first==len(str(n))-1時(shí),這時(shí)代表是正序,當(dāng)然除了正序的情況還有另一種需要特殊考慮的,比如11,它需要用一個(gè)length來識(shí)別,當(dāng)他等于數(shù)字的長(zhǎng)度時(shí),則代表他也屬于可以直接輸出結(jié)果的那種。
至此,這道題就完美收官!
總結(jié)
以上是生活随笔為你收集整理的738.单调递增的数字的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Lintcode 738.Count D
- 下一篇: 频谱分析仪分辨率带宽到底是什么?
