有一行由 N 个数字组成的数字字符串,字符串所表示的数是一正整数。移除字符串中的 K 个数字,使剩下的数字是所有可能中最小的。
假设:
字符串的长度一定大于等于 K
字符串不会以 0 开头
思路
首先,可以用贪心的思想,如果后一个数大于前一个数,则把前一个数字抛弃。对此可以用贪心的思想。用一个栈去存储数据。
其次,如果是有序数组,则把后k位直切抛弃掉。
代码如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNextLine()) {
String num = in.next();
int k = in.nextInt();
char[] arr = num.toCharArray();
char[] s = new char[num.length()];
int top = 0;
boolean order = true;
for (int i = 0; i < s.length; ++i) {
while (top > 0 && s[top - 1] > arr[i] && k > 0) {
--k;
s[--top] = arr[i];
order = false;
}
s[top++]= arr[i];
}
if (order) {
System.out.println(num.substring(0, num.length() - k));
} else {
System.out.println(Integer.parseInt(new String(s, 0, top)));
}
}
}
}