zoukankan      html  css  js  c++  java
  • [Swift]LeetCode313. 超级丑数 | Super Ugly Number

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址:https://www.cnblogs.com/strengthen/p/10260454.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    Write a program to find the nth super ugly number.

    Super ugly numbers are positive numbers whose all prime factors are in the given prime list primes of size k.

    Example:

    Input: n = 12, primes = [2,7,13,19]
    Output: 32 
    Explanation: [1,2,4,7,8,13,14,16,19,26,28,32] is the sequence of the first 12 
                 super ugly numbers given primes = [2,7,13,19] of size 4.

    Note:

    • 1 is a super ugly number for any given primes.
    • The given numbers in primes are in ascending order.
    • 0 < k ≤ 100, 0 < n ≤ 106, 0 < primes[i] < 1000.
    • The nth super ugly number is guaranteed to fit in a 32-bit signed integer.

    编写一段程序来查找第 n 个超级丑数。

    超级丑数是指其所有质因数都是长度为 k 的质数列表 primes 中的正整数。

    示例:

    输入: n = 12, primes = [2,7,13,19]
    输出: 32 
    解释: 给定长度为 4 的质数列表 primes = [2,7,13,19],前 12 个超级丑数序列为:[1,2,4,7,8,13,14,16,19,26,28,32] 。

    说明:

    • 1 是任何给定 primes 的超级丑数。
    •  给定 primes 中的数字以升序排列。
    • 0 < k ≤ 100, 0 < n ≤ 106, 0 < primes[i] < 1000 。
    • 第 n 个超级丑数确保在 32 位有符整数范围内。

    116 ms

     1 class Solution {
     2     func nthSuperUglyNumber(_ n: Int, _ primes: [Int]) -> Int {
     3         let count = primes.count
     4         
     5         var index = Array(repeatElement(0, count: count))
     6         var value = primes
     7         var temp = 0
     8 
     9         var ugly = [1]
    10         for _ in 0..<n - 1 {
    11             temp = Int.max
    12             for j in 0..<count {
    13                 temp = min(temp, value[j])
    14             }
    15             ugly.append(temp)
    16             for j in 0..<count {
    17                 if temp == value[j] {
    18                     index[j] += 1
    19                     value[j] = ugly[index[j]] * primes[j]
    20                 }
    21             }
    22         }
    23         return ugly[n - 1]
    24     }
    25 }

    556ms

     1 class Solution {
     2     func nthSuperUglyNumber(_ n: Int, _ primes: [Int]) -> Int {
     3         var res = [1] 
     4         var c = Array(repeating: 0, count: primes.count)
     5         
     6         for _ in 0 ..< n-1 {
     7             var comp = [Int]()
     8             for i in 0 ..< primes.count {
     9                 comp.append(res[c[i]] * primes[i])
    10             }
    11             
    12             let minP = comp.min()!
    13             res.append(minP)
    14             
    15             for j in 0 ..< comp.count where comp[j] == minP {
    16                 c[j] += 1
    17             }
    18         }
    19         
    20         return res.last!
    21     }
    22 }
  • 相关阅读:
    选择法与冒泡法
    递归法把一个整数通过字符串输出,谭浩强教材习题
    十六进制转十进制 2.0
    十六进制转十进制 谭浩强教材课后习题
    链表操作(改)--学生管理
    矩阵转置(有问题待补充)
    win10 PowerShell下安装vim编辑器
    wsl2+.net core+vscode开发调试环境
    git 一些常用的操作命令
    查看数据库所有表数据占用的空间大小
  • 原文地址:https://www.cnblogs.com/strengthen/p/10260454.html
Copyright © 2011-2022 走看看