题意
求从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 } } }