小于n的最大整数(贪心+回溯O(n))

ans = []

flag = False

def dfs(target, index, hashmap):

    global ans

    global flag

    if index == len(target):

        if ''.join(ans) == target:

            return

        flag = True

        return

    t = int(target[index])

    if hashmap[t] == t:

        ans.append(str(t))

        dfs(target, index + 1, hashmap)

        if flag:

            return

        ans.pop()

    if hashmap[t] < t and hashmap[t]:

        ans.append(str(hashmap[t]))

        for i in range(len(target) - index - 1):

            ans.append(str(hashmap[9]))

        flag = True

        return

    if hashmap[t - 1] > 0:

        ans.append(str(hashmap[t - 1]))

        for i in range(len(target) - index - 1):

            ans.append(str(hashmap[9]))

        flag = True

                   

class Solution:

    def findMax():

        global ans

        ans = []

        flag = False

        n = str(523224)

        nums = [1, 2, 3, 4, 5]

        hashmap = collections.defaultdict(int)

        for i in range(1, 10):

            for j in nums:

                if j <= i:

                    hashmap[i] = j

        dfs(n, 0, hashmap)

        if not ans:

            print(''.join([str(nums[-1]) for i in range(len(n) - 1)]))

            return

        print(''.join(ans))

全部评论

相关推荐

09-11 10:30
安徽大学 Java
难度不算太高
投递美的集团等公司10个岗位
点赞 评论 收藏
分享
09-13 10:40
门头沟学院 Java
听别人介绍,刷了一堆力扣题,考场上写函数,一直无法通过。赛后才知道要自己写输入输出,力扣害人不浅
Silencer76:输入输出练习题单,请https://www.nowcoder.com/exam/oj?page=1&tab=%E7%AE%97%E6%B3%95%E7%AC%94%E9%9D%A2%E8%AF%95%E7%AF%87&topicId=372
投递中国电信等公司10个岗位
点赞 评论 收藏
分享
09-01 16:46
已编辑
门头沟学院 Java
mmvvpp:错了!!给了offer之后还有试用期,试用期过了就完事了?错了!还有每个季度的kpi考核,拿一个c就等着被劝退。那我好好干不拿c不就完了?错了!最多三年劳动合同到期,续不续期未知数。每年都有1800w毕业生毕业,今年你是小萌新蜜月期,明年你是老油条,长江后浪推前浪,前浪死在沙滩上。这就是——互联网!
秋招的破防瞬间
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

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