給定一個以字符串表示的非負整數 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'