本文共 961 字,大约阅读时间需要 3 分钟。
解题思路:永远保持stack是单调递增的状态,只要还有删除的机会
class Solution { public String removeKdigits(String num, int k) { LinkedList<Character> stack = new LinkedList<>(); //栈 int remain = k; //剩余的丢弃次数 char[] cs = num.toCharArray(); //num的char数组 for (char c : cs) { while (remain > 0 && !stack.isEmpty() && stack.getLast() > c) { --remain; stack.removeLast(); } stack.add(c); } //如果还有remain,删除后面 while (remain > 0) { stack.removeLast(); --remain; } //忽略前导0 while (!stack.isEmpty() && stack.getFirst() == '0') { stack.removeFirst(); } //为空的情况,直接返回0 if (stack.isEmpty()) { return "0"; } StringBuilder sb = new StringBuilder(); for (Character c : stack) { sb.append(c); } return sb.toString(); }}
转载地址:http://royg.baihongyu.com/