题目描述:给你一个以字符串表示的非负整数 num 和一个整数 k ,移除这个数中的 k 位数字,使得剩下的数字最小。请你以字符串形式返回这个最小的数字。
事例:
输入:num = “1432219”, k = 3
输出:“1219”
解释:移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219 。
分析:
当字符串的第i位所对应数字大于第i+1位所对应数字,我们删除第i位的数字保留第i+1的数字。利用堆来不断存储获取的数字,这样就可以确保堆从堆底到堆顶一直维持一个递增的顺序,然后我们将新获取的第i位所对应的数字和堆顶数字比较,确保堆顶是较小的数字。只到删除了k个数字,然后循环将剩下的所有数字进入队列。之后再创建一个动态字符串,从堆底获取每个字符串传入动态字符串中。
知识点:
1:创建值为字符的堆
Deque<Character> deque = new LinkedList<Character>();
2:获取字符串所对应的字符
char digit = num.charAt(i);
3:判断堆是否为空
deque.isEmpty()
4:向堆中添加或删除元素
deque.offerLast(digit);
deque.pollLast();
deque.pollFirst();
deque.peekLast()
获取堆顶元素,但是不删除
5:创建一个动态字符串
StringBuilder ret = new StringBuilder();
向字符串中添加元素
ret.append(digit);