删除k个数,剩下的数最小
#!/usr/bin/env python# -*-coding:utf-8-*-import sys"""/** @Author: zuofanxiu* @Date: 11/12/18 1:33 AM* @file:removeKDigits.py* @Software: PyCharm* 依次局部最优解->全局最优解*/""&qu
·
#!/usr/bin/env python
# -*-coding:utf-8-*-
import sys
"""
/*
* @Author: zuofanxiu
* @Date: 11/12/18 1:33 AM
* @file:removeKDigits.py
* @Software: PyCharm
* 依次局部最优解->全局最优解
*/
"""
'''
@param(string): num, a positive interger which has n digits, num is a string
@param(int): k ,a positive interger
@option: remove k digit from num and make num minimize
@return(string): a new num
方法一的复杂度为o(kn)
'''
def removeZero(num):
for i in xrange(len(num)):
if num[i] !='0':
break
else:
num = num[1:]
return num
def func1(num, k):
for i in xrange(k):
hasCut = False
for j in xrange(len(num)):
if num[j] > num[j+1]:
num = num[1:]
hasCut = True
break
if hasCut == False:
num = num[:len(num)-1]
num = removeZero(num)
if len(num) == 0:
return "0"
return num
def func2(num, k):
'''
借助栈结构, 一次遍历,遇到需要删除的数据直接出栈
'''
import stack
s = stack.Stack()
s1 = stack.Stack()
for i in xrange(len(num)):
while s.getTop() is not None and s.getTop() > num[i] and k > 0:
s.pop()
k -= 1
s.push(num[i])
# 字符串重组
tmp = []
while s.top != None:
tmp.append(s.getTop())
s.top = s.top.next
res = removeZero(''.join(reversed(tmp)))
return res
def main():
# res = func1("1593212", 3)
# print res
print func2("1593212", 3)
if __name__ == '__main__':
sys.exit(main())
#!/usr/bin/env python
# -*-coding:utf-8-*-
import sys
"""
/*
* @Author: zuofanxiu
* @Date: 11/12/18 3:21 AM
* @file:stack.py
* @Software: PyCharm
*/
"""
class Node(object):
def __init__(self, val):
self.val = val
self.next = None
class Stack(object):
def __init__(self):
self.top =None
def getTop(self):
if self.top != None:
return self.top.val
else:
return None
def push(self, val):
node = Node(val)
node.next = self.top
self.top = node
return node.val
def pop(self):
if self.top == None:
return None
else:
tmp = self.top.val
self.top = self.top.next
return tmp
def foreach(self):
while self.top != None:
print self.getTop()
self.top = self.top.next
def main():
s = Stack()
print s.getTop()
s.push(1)
s.push(2)
s.push(3)
# s.pop()
print s.getTop()
s.foreach()
if __name__ == '__main__':
sys.exit(main())
点击阅读全文
更多推荐
7日热学榜
活动日历
查看更多
活动时间 2025-01-01 00:00:00

丁奇:MySQL高频面试题详解
活动时间 2025-01-01 00:00:00

AI 大模型应用开发 · 实战营
活动时间 2025-01-01 00:00:00

AI系列课程-IT全学科自学科
活动时间 2025-01-01 00:00:00

3 小时掌握 Prompt 核心技巧与 GPT 技术理论
活动时间 2025-01-01 00:00:00

0基础2个月拿下软考高级证书体验课
所有评论(0)