• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

关于Leetcode个人解题总结:LeetCode264-丑数-II-三指针-刷题打卡2

python 搞代码 4年前 (2022-02-20) 30次浏览 已收录 0个评论

一、题目形容:

给你一个整数 n ,请你找出并返回第 n 个 丑数 。
丑数 就是只蕴含质因数 2、3 和/或 5 的正整数

二、思路剖析:

三指针

1.2,3,5别离对应指针i2,i3,i5,遍历找到以后指针

2.挪动i对于的以后指针,并记录后果

3.找到数组最初一位即是第n个丑数

三、AC 代码:

javascript

<code class="js">/**
 * @param {number} n
 * @return {number}
 */
var nthUglyNumber = function (n) {
    let i2 = 0,//2对应的指针
        i3 = 0,//3对应的指针
        i5 = 0,//5对应的指针
        dp = [1] //dp数组
    for (let i = 1; i < n; i++) {
        //计算i对应以后那个指针
        let min = Math.min(dp[i2] * 2, dp[i3] * 3, dp[i5] * 5)
        //指针别离向前挪动
        if (min === dp[i2] * 2) i2++ 
        if (min === dp[i3] * 3) i3++
        if (min === dp[i5] * 5) i5++
        dp[i] = min
    }
    return dp[dp.length - 1]
};

Python

<code class="py">class Solution(object):
    def nthUglyNumber(self, n):
        """
        :type n: int
        :rtype: int
        """
        i2,i3,i5,dp = 0,0,0,[1]
        for _ in range(1,n):
        # 计算i对应以后那个指针
            minMars = min(dp[i2] * 2, dp[i3] * 3, dp[i5] * 5)
            # 指针别离向前挪动
            if minMars == dp[i2] * 2:
               i2 = i2+1
            if minMars == dp[i3] * 3:
               i3 = i3+1
            if minMars == dp[i5] * 5:
               i5 = i5+1
            dp.append(minMars)
        return dp[len(dp) - 1]

Typescript

<code class="ts">function nthUglyNumber(n: number): number {
    let i2:number = 0,//2对应的指针
        i3:number = 0,//3对应的指针
        i5:number = 0,//5对应的指针
        dp:number[] = [1] //dp数组
    for (let i = 1; i < n; i++) {
        //计算i对应以后那个指针
        let min = Math.min(dp[i2] * 2, dp[i3] * 3, dp[i5] * 5)
        //指针别离向前挪动
        if (min === dp[i2] * 2) i2++ 
        if (min === dp[i3] * 3) i3++
        if (min === dp[i5] * 5) i5++
        dp[i] = min
    }
    return dp[dp.length - 1]
};

Go

<code class="go">func nthUglyNumber(n int) int {
    dp := make([]int, n+1)
    dp[1] = 1
    i2, i3, i5 := 1, 1, 1
    for i := 2; i <= n; i++ {
        //计算i对应以后那个指针
        x2, x3, x5 := dp[i2]*2, dp[i3]*3, dp[i5]*5
        dp[i] = min(min(x2, x3), x5)
        if dp[i] == x2 {
            i2++
        }
        if dp[i] == x3 {
            i3++
        }
        if dp[i] == x5 {
            i5++
        }
    }
    return dp[n]
}

//因为go语言外面没有min()函数,本人构建一个
func min(a, b int) int {
    if a > b {
        return b
    }
    return a
}

四、总结:

1.三指针计算以后i对应的丑数,记录丑数到数组,取最初面一位。持续加油!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:关于Leetcode个人解题总结:LeetCode264-丑数-II-三指针-刷题打卡2
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址