日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

738.单调递增的数字

發布時間:2023/12/29 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 738.单调递增的数字 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
''' Description: 738.單調遞增的數字 Autor: 365JHWZGo Date: 2021-11-10 09:34:56 LastEditors: 365JHWZGo LastEditTime: 2021-11-10 14:55:40 '''class Solution(object):def monotoneIncreasingDigits(self, n):""":type n: int:rtype: int""" strN = str(n)f = strN[0]first = 0length = 0for i in range(1, len(strN)):if int(strN[i]) < int(f): breakelif int(strN[i]) == int(f):length += 1continueelse:f = strN[i]first = iif first==len(strN)-1 or length == len(strN)-1:return n else:return int(strN[:first] + str(int(strN[first])-1)+'9'*(len(strN)-first-1))


思路:
one:
今天上午一直考慮的是如何循環,從最大值往下找數字,這樣經過無數次的失敗之后就一定會找到符合題目要求的數字,但是,在進行測試時發現,運行超出時長限制。

two:
然后開始探索第二種思路,我發現了一些規律,比如

11491537

這個測試用例的話,它就是在最大值處-1,然后結尾補9
然后我又登上了注定失敗的路途

three:
我發現并不是所有的都是在最大值處-1,結尾補9,比如

418

它是在當第二位<第一位時就需要將第一位-1,結尾補9

four:
答案可想而之,還是有測試點無法通過,比如

99998

five:
最后我還是總結一下思路,利用了一個first指針,來識別截取的位置
首先,你會發現這道題的特點
它相鄰兩位的只有三種情況
一:前一位>后一位
二:前一位=后一位
三:前一位<后一位
真對這三種情況分別進行討論:
一:前一位>后一位

  • 這說明此時已經不符合題目要求,再往后判斷已經沒有意義,所以需要記錄前一位的下標,break

二:前一位=后一位

  • 這種情況的話還需要繼續判斷,比如

339967

  • 此時判斷完33之后并不能代表著結束,所以需要continue跳過

三:前一位<后一位

  • 這種情況需要記錄first的下標,因為它代表著當后面一旦出現不符合條件的值時可以從first下標進行-1操作,并在結尾補9

并且我發現有first還可以判斷正序的數字,比如1234,因為當first==len(str(n))-1時,這時代表是正序,當然除了正序的情況還有另一種需要特殊考慮的,比如11,它需要用一個length來識別,當他等于數字的長度時,則代表他也屬于可以直接輸出結果的那種。

至此,這道題就完美收官!

總結

以上是生活随笔為你收集整理的738.单调递增的数字的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。