python--n位数删除k位得到最小数

本文介绍了一种用于移除字符串中指定数量数字的算法。通过循环比较并移除较大的数字来实现最小数值的目标。该方法适用于正整数类型的字符串处理。
#! conding:utf-8
__author__ = "hotpot"
__date__ = "2017/11/8 13:06"


class Solution:
    """
    @param: A: A positive integer which has N digits, A is a string
    @param: l: Remove k digits
    @return: A string
    """

    def DeleteDigits(self, A, l):
        A_list = list(A)
        flag = 0
        print(A_list)
        # write your code here
        for _ in range(l):
            for i in range(flag, len(A_list) - 1):
                # 循环比较当前一位大于后一位的时候删除当前位,然后将下次遍历从删除位开始
                if int(A_list[i]) > int(A_list[i + 1]):
                    A_list.remove(A_list[i])
                    flag = i - 1 if i - 1 > 0 else 0
                    break
                # 有可能数组是不减的数组,所以在最后一次比较的时候也没有办法break这次循环,那么就直接删除最后一位即可,同样需要将下次循环以前一位开始
                elif i == len(A_list) - 2:
                    A_list.remove(A_list[-1])
                    flag -= 1
        # 分成3种情况,因为首位为0必须将0删除,但是如果数组的长度只有1位那么就无需删除,如果最后数组的数据被全部删除,那么数组直接赋值为0
        if len(A_list) > 1:
            while A_list[0] == "0":
                A_list.remove("0")
        elif not A_list:
            A_list = ["0"]
        else:
            pass
        return "".join(A_list)

。,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值