描述 有一行由 N 个数字组成的数字字符串,字符串所表示的数是一正整数。移除字符串中的 K 个数字,使剩下的数字是所有可能中最小的。
假设:
字符串的长度一定大于等于 K 字符串不会以 0 开头 输入 一行由 N 个数字组成的数字字符串(0 < N < 20),和一个正整数 K(K < N),两个数据由空格隔开,如:1432219 3。
输出 移除 K 位后可能的最小的数字字符串。 如 1432219 移除 4, 3, 2 这 3 个数字后得到 1219,为所有可能中的最小值。
mport java.util.*; public class Main { public static void main(String args[]) { Scanner scan = new Scanner(System.in); String line; while (scan.hasNextLine()) { line = scan.nextLine().trim(); String[] arr = line.split(" "); int k = Integer.parseInt(arr[1]); String numNew = arr[0]; while (k != 0){ boolean flag = false; for (int i = 0; i < numNew.length() - 1; i++) { if(numNew.charAt(i) > numNew.charAt(i+1)){ 从左向右遍历,找到比自己右侧数字大的数字并删除 numNew = numNew.substring(0,i) + numNew.substring(i+1, numNew.length()); flag = true; break; } } if(!flag){ //删除最后一个数 numNew = numNew.substring(0, numNew.length()-1); } //清除整数左侧为0的数 //numNew = removeZero(numNew); k--; } int index = 0; for(int i = 0; i < numNew.length(); i++){ if(numNew.charAt(i) != '0'){ index = i; break; } } System.out.println(numNew.substring(index)); } } }编程语言 Java - OpenJDK 1.8.0 结果 通过 最大执行时间 85.45 ms 最大内存开销 21664 KiB 判题信息 运行时间打败了 100% 的 Java 8 玩家!
