<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          ?LeetCode刷題實戰(zhàn)264:丑數(shù) II

          共 2029字,需瀏覽 5分鐘

           ·

          2021-05-15 09:37

          算法的重要性,我就不多說了吧,想去大廠,就必須要經(jīng)過基礎(chǔ)知識和業(yè)務(wù)邏輯面試+算法面試。所以,為了提高大家的算法能力,這個公眾號后續(xù)每天帶大家做一道算法題,題目就從LeetCode上面選 !

          今天和大家聊的問題叫做 丑數(shù) II,我們先來看題面:
          https://leetcode-cn.com/problems/ugly-number-ii/

          An ugly number is a positive integer whose prime factors are limited to 2, 3, and 5.

          Given an integer n, return the nth ugly number.

          給你一個整數(shù) n ,請你找出并返回第 n 個 丑數(shù) 。丑數(shù)就是只包含質(zhì)因數(shù) 2、3 和/或 5 的正整數(shù)。

          示例


          示例 1:

          輸入:n = 10
          輸出:12
          解釋:[1, 2, 3, 4, 5, 6, 8, 9, 10, 12] 是由前 10 個丑數(shù)組成的序列。

          示例 2:

          輸入:n = 1
          輸出:1
          解釋:1 通常被視為丑數(shù)。


          解題


          采用動態(tài)規(guī)劃的方法,dp[i]表示第i+1個丑數(shù)(i從0開始),要求第n個丑數(shù),就是求dp[n-1]。
          首先,最小的丑數(shù)是1,即第一個丑數(shù)dp[0] = 1。然后第i+1個丑數(shù),dp[i] = min(dp[p2] * 2, dp[p3] * 3, dp[p5] * 5),其中指針p2, p3 , p5表示下一個丑數(shù)所乘的質(zhì)因子是2,3,5。然后判斷dp[i]等于其中的哪一項,對應(yīng)的那一項的指針加1。
          最后遍歷完,返回dp[n-1]即可。

          def nthUglyNumber(n):
              dp = [0] * n
              #第一個丑數(shù)為1
              dp[0] = 1
              #表示下一個丑數(shù)是乘以哪個質(zhì)因子(235)得到的。
              #p2表示乘以2,p3表示乘以3, p5表示乘以5.
              p2 = 0
              p3 = 0
              p5 = 0
              #遍歷
              for i in range(1, n):
                  dp[i] = min(dp[p2] * 2, dp[p3] * 3, dp[p5] * 5)
                  #更新對應(yīng)的指針
                  if dp[i] == dp[p2] * 2:
                      p2 += 1
                  if dp[i] == dp[p3] * 3:
                      p3 += 1
                  if dp[i] == dp[p5] * 5:
                      p5 += 1
              print(dp)
              return dp[-1]


          好了,今天的文章就到這里,如果覺得有所收獲,請順手點個在看或者轉(zhuǎn)發(fā)吧,你們的支持是我最大的動力 。

          上期推文:

          LeetCode1-260題匯總,希望對你有點幫助!
          LeetCode刷題實戰(zhàn)261:以圖判樹
          LeetCode刷題實戰(zhàn)262:行程和用戶
          LeetCode刷題實戰(zhàn)263:丑數(shù)


          瀏覽 113
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  中文字幕精品无码网站人口 | 亲子乱AV-区二区三区 | 久久香蕉网站 | 国产寡妇淫乱高清视频 | 免费日韩一级片 |