描述:
有一行由 N 个数字组成的数字字符串,字符串所表示的数是一正整数。移除字符串中的 K 个数字,使剩下的数字是所有可能中最小的。
假设:
输入:
一行由 N 个数字组成的数字字符串(0 < N < 20),和一个正整数 K(K < N),两个数据由空格隔开,如:1432219 3。
- 字符串的长度一定大于等于 K
- 字符串不会以 0 开头
输出:
移除 K 位后可能的最小的数字字符串。 如 1432219 移除 4, 3, 2 这 3 个数字后得到 1219,为所有可能中的最小值。
输入样例:
1432219 3
10200 1
输出样例:
1219
200
思路:
从左向右,找到K范围内最小值,然后根据当前最小值索引删除此前字符,然后减小k值继续寻找,直到k=0,将最小值赋值到result
代码:
import sys
for line in sys.stdin:
data, k = line.strip().split(" ")
k = int(k)
result = []
while True:
if k == 0:
result.extend(data)
break
if len(data) == k:
break
minnum = min(data[:k+1])
# print(minnum)
minnum_index = data[:k+1].index(minnum)#返回最小字符的索引
# print(minnum_index)
data = data[minnum_index+1:]
k -= (minnum_index)
# print(k)
result.append(minnum)
print(int("".join(result)))
本文介绍了一种算法,旨在从一个由N个数字组成的字符串中移除K个数字,目标是找到所有可能组合中数值最小的剩余字符串。通过从左向右遍历并确定K范围内的最小值,算法逐步缩小搜索范围,直至K为0,最终返回最小值构成的字符串。
5899

被折叠的 条评论
为什么被折叠?



