编写一个程序,从给定的数字中移除K位数字,得到最小的可能数字。
- 输入两个数:
number
和k
。 - 在函数内,以尽可能小的方式从给定的数字中移除
k
位数字,形成一个最小数字
示例输入
7896 2
示例输出
76
解释: 最小的2位数字(不改变顺序)是76。
- 数字的顺序需要保留。
- 假设给定的数字是7215,移除2位数字,最小数字为15(不是12,因为在12的数字顺序没有保留)。
思路分析:
题目要求我们在给定的数字中移除k次,得到最小的数字,并且数字顺序不能变。因此,我们可以遍历每个数字,把最小的储存下来。因此,可以联想类似于栈的操作方法,前一个入栈元素与后一个入栈元素进行比较,得到最小的数字。
下面是python代码实现:
def smallest_number(number, k):
s = list(str(number)) #将数字以字符输入并且变为列表,以便遍历
stack = [] #创建列表以便储存最小数字
for digit in s:
while k > 0 and stack and stack[-1] > digit: #判断删除次数 and 保证程序运行 and 取得最小数字
stack.pop() #如果前一个数字大于后一个数字就删除
k -= 1
stack.append(digit) #模拟数字入栈
# 如果还需要删除数字,说明已经找不到比较大的数字了
while k > 0:
stack.pop()
k -= 1
return ''.join(stack)
# 获取数字
number = int(input())
# 获取k值,从数字中移除k位数字
k = int(input())
# 调用函数,输出结果
print(smallest_number(number, k))