LeetCode (移掉K位数字)
根据大佬提示做出
class Solution {
public String removeKdigits(String num, int k) {
Deque<Character> deque = new LinkedList<Character>();
int length = num.length();
for (int i = 0; i < length; ++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();
}
}
本来使用栈做,但是由于出栈时顺序相反,后面使用了双端队列Deque。
中途尝试使用 逆序输出的迭代器,但是又引入一个新的问题,当第一个数是0时,用迭代器判断后会丢失部分数据,所以又“有疾而终了”~
(还未解决,等明天课间继续研究)