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题解

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-07 13:15
点赞 评论 收藏
分享
06-15 18:44
黄淮学院 Java
Lynn012:如果是居民楼还是算了吧,看着有点野呢
点赞 评论 收藏
分享
积极的小学生不要香菜:你才沟通多少,没500不要说难
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务