保留最大的数

题目描述

给定一个十进制的正整数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 }

 

posted @ 2018-05-02 17:47  千彧  阅读(164)  评论(0编辑  收藏  举报