貪心算法——移除K位數字

給定一個以字符串表示的非負整數 num,移除這個數中的 k 位數字,使得剩下的數字最小。
注意:
num 的長度小於 10002 且 ≥ k。
num 不會包含任何前導零。

例子:
輸入: num = “1432219”, k = 3
輸出: “1219”
解釋: 移除掉三個數字 4, 3, 和 2 形成一個新的最小的數字 1219。

問題:
貪心策略
數據轉換

解決:
貪心策略:有很多種移除一位的結果,但每種結果的位數都是相同的。相同位數的兩個數判斷大小的方法是什麼? 較高位的大小
所以每次移除都要儘量使,結果的高位儘可能小。
所以從左到右比較,當高位大於次高位時,移除高位

數據轉換:
因爲涉及元素比較移除,所以字符串先轉爲列表
處理好後的列表在轉爲字符串
代碼:

class Solution:
    def removeKdigits(self, num: str, k: int) -> str:

        nums=[i for i in num]
        for i in range(k):
            for j in range(len(nums)-1):
                if nums[j]>nums[j+1]:
                    nums.pop(j)
                    break
            else:
                nums.pop()
        j=0
        #因爲類似【’1‘,‘0’,’2‘】,k=1 結果爲【‘0’,’2‘】,所以列表最後要去除以0開頭的連續0元素,記錄第一個非0元素位置
        for i in nums:
            if i=='0':
                j+=1
            else:
                break
        #因爲類似【‘0’,‘0’】 會在上一步變爲【】,所以要判斷
        return ''.join(nums[j:]) if j!=len(nums) else '0'
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章