每日一练 最大值

折腾了半天,还是要找对思路

题目大意

给定任意一个数字 m,然后给出数字 n,则需在 m 中去掉 n 位数,保持各位顺序不变的情况下,得到最大数。
输入描述
输入整数n,m (1<=n<=1e100,1<=m<=100)
输出描述
输出删除后的最大数。
示例
输入:1234 2
输出:34

解题思路

计算出结果坑位数(size = n.length - m)
每一个坑位数的最大值下标[0, size]、[0, size + 1]、[0, size + 2]……
最难理解在第二点,因为题目说保障前后顺序,所以比如 12345 2,那么,坑位数为 3,第一个位置的最大值在[0, 2],第二个[0, 3],第三个[0, 4],中途如果被用过的数字需要做下标记,后面的坑位不能再使用

代码

class Solution:
    def __init__(self) -> None:
        pass

    def solution(self, n):
        result = None

        # TODO: 请在此编写代码
        num = n[0]
        num_list = []
        while num > 0:
            num_list.insert(0,num % 10)
            num = num // 10
        if len(num_list) <= n[1]:
            result = 0
            return result

        mm = len(num_list) - n[1]
        result_list = []
        index = 0

        for j in range(mm):
            num_list_temp = num_list[index:(n[1]+j+1)]
            maxvalue = max(num_list_temp)
            for jj in range(index,(n[1]+j+1)):
                if num_list[jj] == maxvalue:
                    index = jj
                    num_list[index] = -1
                    break

            result_list.append(maxvalue)

           
        result = 0

        for jj in range(len(result_list)):
            result += result_list[jj]*(10**(len(result_list)-jj-1))

        return result


if __name__ == "__main__":
    n = [int(item) for item in input().strip().split()]

    sol = Solution()
    result = sol.solution(n)

    print(result)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值