字符串形式的整形数字,删除其中K个数字(K小于字符串的长度), 使得剩余字符组成新的整数是最小的。

/*
    给定一个非负的、字符串形式的整形数字,例如“12353789”,
字符串的长度也就是整形数字的位数不超过10000位,并且字符串不会以0开头,小C需要挑选出其中K个数字(K小于字符串的长度)并删掉他们,
使得剩余字符组成新的整数是最小的。

输入描述
第一行输入一串纯数字形式的字符串,组成一个正整数

第二行输入一个正整数K (K < 字符串的长度)

输出描述
输出一个数字(字符串格式)
 */

//思路:贪心算法,每次都删除左边较大的数字

import java.util.Scanner;

public class RemoveStringNumber {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        //输入一串纯数字形式的字符串,组成一个正整数
        String num = in.next();
        //输入一个正整数K (K < 字符串的长度)
        int k = in.nextInt();

        int n = num.length();
        //答案字符串
        StringBuilder res = new StringBuilder();

        for (char c : num.toCharArray()) {
            while (k > 0 && res.length() > 0 && res.charAt(res.length() - 1) > c) {
                res.deleteCharAt(res.length() - 1);
                k --;
            }

            res.append(c);
        }

        //删除处理后 第一个数字为0
        //比如10000408 k=1
        while (res.length() > 0 && res.charAt(0) == '0') {
            res.deleteCharAt(0);
        }

        String ans;
        ans = res.length() == 0 ? "0" : res.toString();

        System.out.println(ans);
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值