移出k个数

 * 给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。
 * 
输入: num = "1432219", k = 3
输出: "1219"
解释: 移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219。
 */
思路:
/**
 * 从左到右遍历每一位,放入stack
 * 弹出stack与当前比较,弹出较大替换,弹出较小插入,直到替换了k个为止
 * 对于0开头不断截取直到第一位不是0
 */
if(k==num.length()){
            return "0";
        }
        Stack<Character> s=new Stack();;
        int r=k;
        s.push(num.charAt(0));
        String str="";
        
        for(int i=1;i<num.length();i++){
            while(!s.isEmpty()&&r>0&&s.peek()>num.charAt(i)){
                s.pop();
                r--;
            }
            s.push(num.charAt(i));
        }
        
        char []c=new char[s.size()];
        for(int i=s.size()-1;i>=0;i--){
           c[i]=s.pop();
        }

                
        for(int i=0;i<num.length()-k;i++){
            str=str+c[i];
        }
        while(str.length()>1&&str.charAt(0)=='0')
            str=str.substring(1, str.length());
        return str;

  

 
原文地址:https://www.cnblogs.com/jieyi/p/14050325.html