经典面试题系列(Golang)-- 查询特殊数字【leetcode改编】
特殊数字”是指只能被分解为2,3,7的乘积的数字。“特殊数字”序列为1, 2, 3, 4, 6, 7, 8, 9, 12, 14, ...展示了前10个“特殊数字”。按照惯例,1也是“特殊数字”。给定整数n,写一个程序,找到序列中,第n个“特殊数字”。如:n=9,找到“特殊数字”序列中第9位数字,也就是输出12。
输入:
每一行包含一个正整数,n (n <= 1500)。如果输入的一行为0,则输入终止。
输出:
对于每一行输入,输出“特殊数字”。注意不要解析输入为0的行
输入:
1
2
9
0
输出:
1
2
12
解决思路:首先通过枚举,找到一个区间的所有符合题目规则的数,然后将其排序,最后从这个排序列表里取出即可。在这里,基于golang实现,定义一个全局切片,保存符合题目规则的数,
然后排序。
代码:
package main
import (
"fmt"
"math"
"sort"
)
var utilSlice = make([]int, 1)
func Init() []int {
for i := 0; i < 30; i++ {
for j := 0; j < 20; j++ {
for k := 0; k < 10; k++ {
cur := math.Pow(2, float64(i)) * math.Pow(3, float64(j)) * math.Pow(7, float64(k))
utilSlice = append(utilSlice, int(cur))
}
}
}
sort.Ints(utilSlice)
return utilSlice
}
func main() {
var input int
Init()
//fmt.Println(utilSlice)
for {
fmt.Scanln(&input)
if input == 0 {
break
}
fmt.Println("对应的数字为:",utilSlice[input])
}
}