数学课上,老师给你了一个很大的整数,最大可能达到100位,然后告诉你删除其中若干位,但要保证删除若干位后的新的数是最小的数。
时间: 2024-03-23 16:38:57 浏览: 68
这是一个经典的贪心算法问题。我们可以从高位开始遍历这个数,如果当前数字比后面的数字大,则删除当前数字即可。如果当前数字比后面的数字小,则保留当前数字,继续遍历后面的数字。如果已经删除了指定数量的数字,但是后面还有数字,则直接将后面的数字全部保留。最后得到的数字就是删除若干位后的最小数。
以下是一个简单的 Python 实现:
```python
def delete_digits(num, k):
stack = []
for digit in num:
while stack and k > 0 and stack[-1] > digit:
stack.pop()
k -= 1
stack.append(digit)
# 如果 k 还有剩余,则删除末尾的数字
while k > 0:
stack.pop()
k -= 1
# 删除前导零
while stack and stack[0] == '0':
stack.pop(0)
return ''.join(stack) or '0'
```
其中,num 是给定的整数,k 是要删除的数字的数量。这个函数会返回删除若干位后的最小数。
相关问题
题目描述 数学课上,老师给你了一个很大的整数,最大可能达到100位,然后告诉你删除其中若干位,但要保证删除若干位后的新的数是最小的数。 输入 一行一个n位的整数和要删除的位数个数k。n大于0小于100. 输出 删除k位后,最小的新数。 样例输入 复制 12345678654321 1 样例输出 复制 1234567654321
好的,你的问题是关于一个数学问题的。题目描述如下:数学课上,老师给你了一个很大的整数,最大可能达到100位,然后告诉你删除其中若干位,但要保证删除若干位后的新的数是最小的数。输入一行一个n位的整数和要删除的位数个数k。n大于0小于100。输出删除k位后,最小的新数。样例输入:12345678654321 1,样例输出:1234567654321。请问你有什么想法或者需要我帮助的地方吗?
阅读全文