题意

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