-
题目链接 https://leetcode-cn.com/problems/remove-k-digits/
-
题目描述
- 给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。
-
输入: num = "1432219", k = 3 输出: "1219" 解释: 移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219。
-
输入: num = "10200", k = 1 输出: "200" 解释: 移掉首位的 1 剩下的数字为 200. 注意输出不能有任何前导零。
-
解题思路
- 考虑k = 1的情况,也就是说从num中删除一个字符使其最小,那么我们要做的就是从左向右找到第一个数比其下个数大即可,对于k = n的情况我们可以做n次上述操作,但明显会超时。
- 换个角度来考虑,只要当前数字比前一个数字小,那么前一个数字就有可能被删除。
- 维护一个递增的栈,遍历num,如果当前数字比栈顶元素大,就加入栈,若是小那么就一直出栈,知道栈顶元素小于等于当前数字。
-
代码
- python
class Solution: def removeKdigits(self, num: str, k: int) -> str: if len(num) == k:return '0' s, j = [], 0 for i in num: while s and i < s[-1] and j < k: s.pop() j += 1 s.append(i) return str(int(''.join(s)[:len(num)-k]))
- python
leetcode 402. 移掉K位数字
最新推荐文章于 2024-05-24 22:02:00 发布