题意
求从0到9999满足每个数位各不相同的第k大的数,如果一个数不足5位,补全前导零使其超过5位
思路
从9999倒序遍历,判断当前的数是否满足条件,满足的话k=k-1,当k=0的时候当前数就是答案。要注意输出的是一个五位的数,需要补前导零
代码
package main
import (
"fmt"
"strconv"
)
func check(x int) (string,bool) {
s := strconv.Itoa(x)
for len(s) < 5 {
s = "0" + s
}
mp := make(map[uint8]int)
for i := 0; i < len(s); i ++ {
mp[s[i]] ++
if mp[s[i]] > 1 {
return s,false
}
}
return s,true
}
func main() {
var k int
fmt.Scan(&k)
for i := 99999; i >= 0; i -- {
str,ok := check(i)
if ok {
k --
}
if k == 0 {
fmt.Println(str)
return
}
}
}

京公网安备 11010502036488号