1. 程式人生 > >【leetcode】402. Remove K Digits

【leetcode】402. Remove K Digits

.com self. 一個 方法 enume spa get pre enumerate

題目如下:

技術分享圖片

解題思路:我的方法是從頭開始遍歷num,對於任意一個num[i],在[i+1~len(num)-1]區間內找出離num[i]最近並且小於num[i]的數num[j],如果j-i <= k的話表示num[j]可以被刪除,同時記k -= 1;如果找不到num[j]或者j-i > k則表示不能被刪除。如果num遍歷完成,但是k>0的話,把num最後k個字符刪除,即為最終結果。

代碼如下:

class Solution(object):
    def getNearbyMin(self,d,val):
        inx = 10002
        for i in
range(val): i = str(i) if i in d and len(d[i]) > 0: inx = min(inx,d[i][0]) return inx def removeKdigits(self, num, k): """ :type num: str :type k: int :rtype: str """ import bisect res = ‘‘ dic
= {} for i,v in enumerate(num): if v not in dic: dic[v] = [i] else: bisect.insort_left(dic[v],i) for i, v in enumerate(num): nextMinInx = self.getNearbyMin(dic,int(v)) if (nextMinInx-i) <= k: k
-= 1 else: res += v del dic[v][0] if k > 0: res = res[:len(res)-k] if len(res) == 0: res = 0 return str(int(res))

【leetcode】402. Remove K Digits