删去k个数字后的最小值

public static String removeKDigits(String num,int k) {
        //新整数的最终长度=原长度 - k
        int newLength=num.length()-k;
        //创建一个栈,用于接收所有数字
        char[] stack=new char[num.length()];
        //栈顶指针
        int top=0;
        for (int i = 0; i < stack.length; i++) {
            char c=num.charAt(i);
            while(top > 0 && stack[top-1] > c && k > 0) {
                top--;
                k--;
            }
            stack[top++]=c;
        }
        //找到栈中第一个非0整数的位置,以此来构建整数字符串
        int offset=0;
        while(offset < newLength && stack[offset] == '0') {
            offset++;
        }
        return offset==newLength ? "0" : new String(stack,offset,newLength - offset);
    }
    
    public static void main(String[] args) {
        System.out.println(removeKDigits("1593212", 1));
        System.out.println(removeKDigits("1593212", 4));
    }

 

posted @ 2018-11-24 16:09  冬马党  阅读(272)  评论(0编辑  收藏  举报