【LeetCode】402.移掉k位數字
阿新 • • 發佈:2022-04-01
402.移掉k位數字
知識點:陣列;棧;
題目描述
給你一個以字串表示的非負整數 num 和一個整數 k ,移除這個數中的 k 位數字,使得剩下的數字最小。請你以字串形式返回這個最小的數字。
示例
輸入:num = "1432219", k = 3
輸出:"1219"
解釋:移除掉三個數字 4, 3, 和 2 形成一個新的最小的數字 1219 。
輸入:num = "10200", k = 1
輸出:"200"
解釋:移掉首位的 1 剩下的數字為 200. 注意輸出不能有任何前導零。
輸入:num = "10", k = 2
輸出:"0"
解釋:從原數字移除所有的數字,剩餘為空就是 0 。
解法一:棧
if 維持一個棧,if要遍歷的元素比棧頂還要小,而且k還有名額,那就棧頂出棧,然後這個元素入棧;
class Solution(object): def removeKdigits(self, num, k): stack = [] remain = len(num) - k for digit in num: while k and stack and stack[-1] > digit: stack.pop() k -= 1 stack.append(digit) return ''.join(stack[:remain]).lstrip('0') or '0' # 最後可能k還大於0,所以要把末尾的刪除