Remove K Digits
给一个字符串表示的数, 返回删除k个数字后, 最小的那个.首先需要观察一下数字的表示, 越靠左边的数字的位数越高, 那么他 这个需要用一个数组, 把字符放到数组的index中, 数组本身, 找到前k个大的数字, 然后验证是否是递减的, 如果不是, 则删除当前的. 最后还要把leading 0去掉.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
public class Solution { public String removeKdigits(String num, int k) { int total = num.length() - k; char[] ary = num.toCharArray(); int top = 0; for(int i = 0; i< num.length(); i++) { char c = num.charAt(i); while(top > 0 && ary[top-1] > c && k > 0){ // current < previous k--; top--; } ary[top++] = c; } int index = 0; while(index < total&&ary[index] == '0'){ // remove leading 0 index++; } if(index == total) return "0"; else return new String(ary, index, total-index); } } |