1. 程式人生 > 其它 >【LeetCode】402.移掉k位數字

【LeetCode】402.移掉k位數字

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,所以要把末尾的刪除