zoukankan      html  css  js  c++  java
  • 【leetcode】402. Remove K Digits

    题目如下:

    解题思路:我的方法是从头开始遍历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))
  • 相关阅读:
    js技巧大全
    DOM
    网页页面跳转几种方法
    JavaScript中创建对象的几种方式
    web本地存储-UserData
    图片预加载
    闭包
    JavaScript高级编程学习笔记(第三章之一)
    .net core 部署到ubuntu
    fiddler autoresponder 动态修改响应内容
  • 原文地址:https://www.cnblogs.com/seyjs/p/9371175.html
Copyright © 2011-2022 走看看