LeetCode 402. 移掉 K 位数字
题目描述
给你一个以字符串表示的非负整数 num 和一个整数 k ,移除这个数中的 k 位数字,使得剩下的数字最小。请你以字符串形式返回这个最小的数字。
示例 1 :
输入:num = “1432219”, k = 3
输出:“1219”
解释:移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219
1 <= k <= num.length <= 105
num 仅由若干位数字(0 - 9)组成
除了 0 本身之外,num 不含任何前导零
一、解题关键词
二、解题报告
1.思路分析
2.时间复杂度
3.代码示例
class Solution {
public String removeKdigits(String num, int k) {
Deque<Character> deque = new LinkedList<>();
int len = num.length();
for(int i = 0; i < len;i++){
char digit = num.charAt(i);
while(!deque.isEmpty() && k > 0 && deque.peekLast() > digit){
deque.pollLast();
k--;
}
deque.offerLast(digit);
}
for(int i = 0; i < k;i++){
deque.pollLast();
}
StringBuilder ret = new StringBuilder();
boolean leadingZero = true;
while(!deque.isEmpty()){
char digit = deque.pollFirst();
if(leadingZero && digit == '0'){
continue;
}
leadingZero = false;
ret.append(digit);
}
return ret.length() == 0 ? "0" : ret.toString();
}
}
2.知识点
该博客介绍了LeetCode402题目的解决方案,即如何从一个非负整数中移除k个数字以得到最小的数字。通过使用双指针和堆栈来跟踪有效数字,实现了在O(n)的时间复杂度内完成任务。博客详细讲解了思路、代码实现,并总结了相关编程知识点。
421

被折叠的 条评论
为什么被折叠?



