您现在的位置是:首页 >学无止境 >Golang每日一练(leetDay0092) 丑数 III Ugly Number iii网站首页学无止境
Golang每日一练(leetDay0092) 丑数 III Ugly Number iii
简介Golang每日一练(leetDay0092) 丑数 III Ugly Number iii
目录
263. 丑数 Ugly Number I
丑数 就是只包含质因数 2
、3
和 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
个 丑数 。
丑数 就是只包含质因数 2
、3
和/或 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)暂停更 |
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。