西安网站建设最新案例,wordpress 动态插件,上海搜索优化推广哪家强,山西建设执业注册中心网站题目描述
给定一个以字符串表示的数字 num 和一个数字 k #xff0c;从 num 中移除 k 位数字#xff0c;使得剩下的数字最小。如果可以删除全部数字#xff0c;则结果为 0。
1.num仅有数字组成
2.num是合法的数字#xff0c;不含前导0
3.删除之后的num#xff0c;请去…题目描述
给定一个以字符串表示的数字 num 和一个数字 k 从 num 中移除 k 位数字使得剩下的数字最小。如果可以删除全部数字则结果为 0。
1.num仅有数字组成
2.num是合法的数字不含前导0
3.删除之后的num请去掉前导0不算在移除次数中
数据范围num的长度满足 1≤105 1≤k≤n≤105 保证 num 中仅包含 0~9 的十进制数
输入描述
第一行输入一个字符串数字一个数字K
输出描述
剩余的数字
示例一
输入
1432219,3输出
1219
示例二
输入
100999,3输出
9 代码实现
# codingutf-8# 移掉 K 位数字
# https://www.nowcoder.com/practice/0fe685c8272d40f1b9785fedd2499c1c?tpId196tqId39412ru/exam/oj思路核心以某字符为中心寻找左边的最近比该字符严格小的字符。单调栈严格单调递增步骤从左到右遍历字符串如果栈非空栈顶元素当前字符k!0则弹栈并最后将当前字符入栈。当k0时则说明弹栈次数用完了。当弹出0的时候不需k--,因为前导0忽略。最后当弹栈次数用完后只需将栈中字符和未入栈字符拼接即可得到数值最小化。class Solution:def removeKnums(self, num, k):# write code herestack []for i in range(len(num)):while stack and k and int(num[i]) int(stack[-1]):k - 1stack.pop()if not stack and num[i] 0:continuestack.append(num[i])stack stack[:-k] if k else stackif not stack:stack.append(0)return .join(stack)