算法题-将字符串(都为数字)删除n个字符,剩下的数字最小-python递归法


前言

一、将字符串删除n个字符,剩下的数字最小-python递归法

算法题
有一个字符串s,仅有数字组成,现在将字符串的删除n个字符,使得剩下的字符组成的数字最小,不能打乱字符的顺序。

python递归法

def remove_digits(s, n):
    if n == 0:
        return s
    if len(s) <= n:
        return ''
    
    min_char = min(s[:n+1])
    min_idx = s.index(min_char)
    
    return min_char + remove_digits(s[min_idx+1:], n-min_idx)

s = "987654321"
n = 3
result = remove_digits(s, n)
print(result) # 输出结果为 "654321"

递归实现是通过每次找到当前字符串中最小的字符及其位置,然后在该字符右侧的子串上递归调用函数来完成的。具体地,如果要删除的字符数为零,则直接返回原始字符串;而如果剩余要删除的字符数大于等于字符串的长度,则返回空字符串。在每个递归步骤中,找到当前字符串中的最小字符并获取其索引,然后将其添加到结果字符串中,并在递归调用中使用从该索引位置开始的子字符串和更新后的要删除的字符数。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值