您现在的位置是:首页 >学无止境 >Golang每日一练(leetDay0092) 丑数 III Ugly Number iii网站首页学无止境

Golang每日一练(leetDay0092) 丑数 III Ugly Number iii

Hann Yang 2024-09-26 00:01:02
简介Golang每日一练(leetDay0092) 丑数 III Ugly Number iii

目录

263. 丑数 Ugly Number I  ?

264. 丑数 Ugly Number II  ??

? 每日一练刷题专栏 ?

Rust每日一练 专栏

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


263. 丑数 Ugly Number I

丑数 就是只包含质因数 23 和 5 的正整数。

给你一个整数 n ,请你判断 n 是否为 丑数 。如果是,返回 true ;否则,返回 false 。

示例 1:

输入:n = 6
输出:true
解释:6 = 2 × 3

示例 2:

输入:n = 1
输出:true
解释:1 没有质因数,因此它的全部质因数是 {2, 3, 5} 的空集。习惯上将其视作第一个丑数。

示例 3:

输入:n = 14
输出:false
解释:14 不是丑数,因为它包含了另外一个质因数 7 。

提示:

  • -2^31 <= n <= 2^31 - 1

代码:

package main

import "fmt"

func isUgly(n int) bool {
	if n <= 0 {
		return false
	}
	for _, i := range []int{2, 3, 5} {
		for n%i == 0 {
			n /= i
		}
	}
	return n == 1
}

func main() {
	fmt.Println(isUgly(6))
	fmt.Println(isUgly(1))
	fmt.Println(isUgly(14))
	for i := 1; i < 21; i++ {
		if isUgly(i) {
			fmt.Print(i, " ")
		}
	}
	fmt.Println()
}

递归写法:

package main

import "fmt"

func isUgly(n int) bool {
	if n <= 0 {
		return false
	} else if n == 1 {
		return true
	} else if n%2 == 0 {
		return isUgly(n / 2)
	} else if n%3 == 0 {
		return isUgly(n / 3)
	} else if n%5 == 0 {
		return isUgly(n / 5)
	} else {
		return false
	}
}

func main() {
	fmt.Println(isUgly(6))
	fmt.Println(isUgly(1))
	fmt.Println(isUgly(14))
	for i := 1; i <= 20; i++ {
		if isUgly(i) {
			fmt.Print(i, " ")
		}
	}
}

输出:

true
true
false 
1 2 3 4 5 6 8 9 10 12 15 16 18 20 


264. 丑数 Ugly Number II

给你一个整数 n ,请你找出并返回第 n 个 丑数 。

丑数 就是只包含质因数 23 和/或 5 的正整数。

示例 1:

输入:n = 10
输出:12
解释:[1, 2, 3, 4, 5, 6, 8, 9, 10, 12] 是由前 10 个丑数组成的序列。

示例 2:

输入:n = 1
输出:1
解释:1 通常被视为丑数。

提示:

  • 1 <= n <= 1690

代码:

package main

import "fmt"

func nthUglyNumber(n int) int {
	nums := []int{1}
	p2, p3, p5 := 0, 0, 0
	for i := 1; i < n; i++ {
		tmp := min(nums[p2]*2, nums[p3]*3, nums[p5]*5)
		nums = append(nums, tmp)
		if nums[i] == nums[p2]*2 {
			p2++
		}
		if nums[i] == nums[p3]*3 {
			p3++
		}
		if nums[i] == nums[p5]*5 {
			p5++
		}
	}
	return nums[n-1]
}

func min(a, b, c int) int {
	if a < b {
		if a < c {
			return a
		}
	} else if b < c {
		return b
	}
	return c
}

func main() {
	fmt.Println(nthUglyNumber(10))
	fmt.Println(nthUglyNumber(1))
	for i := 1; i <= 14; i++ {
		fmt.Print(nthUglyNumber(i), " ")
	}
	fmt.Println()
}

 调用上题函数:

package main

import "fmt"

func isUgly(n int) bool {
	if n <= 0 {
		return false
	}
	for _, i := range []int{2, 3, 5} {
		for n%i == 0 {
			n /= i
		}
	}
	return n == 1
}

func nthUglyNumber(n int) int {
	count := 0
	i := 1
	for count < n {
		if isUgly(i) {
			count++
		}
		if count == n {
			return i
		}
		i++
	}
	return -1
}

func main() {
	fmt.Println(nthUglyNumber(10))
	fmt.Println(nthUglyNumber(1))
	for i := 1; i <= 14; i++ {
		fmt.Print(nthUglyNumber(i), " ")
	}
	fmt.Println()
}

输出:

12
1
1 2 3 4 5 6 8 9 10 12 15 16 18 20 


? 每日一练刷题专栏 ?

持续,努力奋斗做强刷题搬运工!

? 点赞,你的认可是我坚持的动力! 

? 收藏,你的青睐是我努力的方向! 

评论,你的意见是我进步的财富!  

 主页:https://hannyang.blog.csdn.net/ 

Rust每日一练 专栏

(2023.5.16~)更新中...

Golang每日一练 专栏

(2023.3.11~)更新中...

Python每日一练 专栏

(2023.2.18~2023.5.18)暂停更

C/C++每日一练 专栏

(2023.2.18~2023.5.18)暂停更

Java每日一练 专栏

(2023.3.11~2023.5.18)暂停更

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。