首页 > 其他 > 详细

【leetcode】402. Remove K Digits

时间:2018-07-26 14:35:04      阅读:165      评论:0      收藏:0      [点我收藏+]

题目如下:

技术分享图片

解题思路:我的方法是从头开始遍历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

原文:https://www.cnblogs.com/seyjs/p/9371175.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!