# Golang每日一练(leetDay0092) 丑数 I\II Ugly Number i\ii

## 263. 丑数 Ugly Number I

• -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

• 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

## 🌟 每日一练刷题专栏 🌟

👍 点赞，你的认可是我坚持的动力！

🌟 收藏，你的青睐是我努力的方向！

 （2023.5.16~）更新中... （2023.3.11~）更新中... （2023.2.18~2023.5.18）暂停更 （2023.2.18~2023.5.18）暂停更 （2023.3.11~2023.5.18）暂停更

|
7天前
|
C++
【链表】还不会用C++实现链表？一文教会你各种链表的实现
【链表】还不会用C++实现链表？一文教会你各种链表的实现
48 0
|
7天前
|

C++链表常用的函数编写（增查删改）内附完整程序
C++链表常用的函数编写（增查删改）内附完整程序
30 0
|
7天前
|

【C/C++ 链表结构】探索链表迭代器：C++实现的深入分析与优化策略
【C/C++ 链表结构】探索链表迭代器：C++实现的深入分析与优化策略
43 0
|
7天前
|

61 0
|
7天前
|

【C/C++ 线性表】C++ 从零开始实现 双向循环链表（Exploring Doubly Circular Linked List in C++）
【C/C++ 线性表】C++ 从零开始实现 双向循环链表（Exploring Doubly Circular Linked List in C++）
67 0
|
7天前
|

【C/C++ 数据结构 线性表】 数据结构 解析 链表中哨兵节点（伪节点）的作用
【C/C++ 数据结构 线性表】 数据结构 解析 链表中哨兵节点（伪节点）的作用
21 0
|
7天前
|

C++链表解析：从基础原理到高级应用，全面掌握链表的使用
C++链表解析：从基础原理到高级应用，全面掌握链表的使用
60 0
|
7天前
|
C语言 C++
【c++】用c++实现带头双向循环链表
【c++】用c++实现带头双向循环链表
26 1
|
7天前
|
Java C++ Python

31 0
|
7天前
|

【数据结构】链表—C/C++实现
【数据结构】链表—C/C++实现
61 1