1. 程式人生 > 實用技巧 >移出k個數

移出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;