题目描述
给定一个十进制的正整数number,选择从里面去掉一部分数字,希望保留下来的数字组成的正整数最大。
输入描述:
输入为两行内容,第一行是正整数number,1 ≤ length(number) ≤ 50000。第二行是希望去掉的数字数量cnt 1 ≤ cnt < length(number)。
输出描述:
输出保留下来的结果。
示例1
输入
325 1
输出
35
1 import java.util.ArrayList; 2 import java.util.Arrays; 3 import java.util.Collection; 4 import java.util.List; 5 import java.util.Scanner; 6 /** 7 * 8 * 保留最大数 , 9 * 位数一定,就让左边的数尽可能的大 10 * 用i循环 ,保证i前边没有比i大的数,i后移, 11 */ 12 public class Main { 13 public static void main(String[] args) { 14 // 输入 15 Scanner sc = new Scanner(System.in); 16 String num = sc.nextLine(); 17 int n = sc.nextInt(); 18 // 处理 19 String[] ss = num.split(""); 20 List<String> list = new ArrayList(); 21 list.addAll(Arrays.asList(ss)); 22 // 1、 23 for (int i = 1; i < ss.length; i++) {// 循环 到 list 尾退出 24 if (n == 0) { 25 break; // 去除 n 位后退出 26 } 27 while (i>0&&i<list.size()// 保证不越界 28 &&list.get(i).compareTo(list.get(i - 1)) > 0) { // 循环保证 i前边没有比他大的数 29 if (n == 0) { 30 break; // 去除 n位后退出 31 } 32 list.remove(i - 1); 33 i--; // 去除前边的 i指向的下标要 减一 34 n--; 35 } 36 } 37 // 2、 38 while (n > 0) {// 如果去到 list已经从大到小排序,位数还不够n 就接着 从尾部取 39 list.remove(list.size() - 1); 40 n--; 41 } 42 String res = ""; 43 for (String s : list) { 44 res += s; 45 } 46 System.out.println(res); 47 } 48 }