15天大厂真题带刷 - ZT14小红的好数 | Go

小红的好数

https://www.nowcoder.com/practice/de234d0d61d549c6a436e9509dbeea11

题意

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

#牛客创作赏金赛#
15天大厂真题带刷Go题解 文章被收录于专栏

15天大厂真题带刷Golang题解

全部评论

相关推荐

内向的柠檬精在研究求职打法:你们广东工业大学为啥这么多字节,好吓人,还有那个东北大学,重庆邮电,太哈人了
点赞 评论 收藏
分享
头像
03-20 22:00
重庆大学 Java
适彼乐土:“他们不行再找你” 最后的底牌吗?有点意思
点赞 评论 收藏
分享
05-03 12:45
西南大学 Java
sdgfdv:你这项目写的内容太多了,说实话都是在给自己挖坑,就算简历过了,后面面试也难受
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务