【华为OD统一考试B卷】 找最小数 Java
题目描述
给一个正整数NUM1,计算出新正整数NUM2,NUM2为NUM1中移除N位数字后的结果,需要使得NUM2的值最小。
输入描述
1.输入的第一行为一个字符串,字符串由0-9字符组成,记录正整数NUM1,NUM1长度小于32.2.输入的第二行为需要移除的数字的个数,小于NUM1长度。
输出描述
输出一个数字字符串,记录最小值NUM2
示例
2615371 4 131
public class test26 {
static List<Integer> list = new ArrayList<>();
static StringBuilder builder = new StringBuilder();
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String num1 = sc.next();
int removeCount = sc.nextInt();
backtracking(num1.length(),num1.length()-removeCount,0,num1);
System.out.println(Collections.min(list));
}
private static void backtracking(int len, int k, int startindex, String s){
if(builder.length()==k){
list.add(Integer.parseInt(builder.toString()));
return;
}
for (int i = startindex; i < len; i++) {
builder.append(s.charAt(i));
backtracking(len,k,i+1,s);
builder.deleteCharAt(builder.length()-1);
}
}
}
public class test27 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String num1 = sc.next();
int removeCount = sc.nextInt();
int k = num1.length()-removeCount;
int count = k;
StringBuilder builder = new StringBuilder();
while (builder.length()<k) {
ArrayList<Integer> list = new ArrayList<>(Integer.parseInt(num1));
Integer min = Collections.min(list);
if (num1.indexOf(min)<=num1.length()-count) {
num1 = num1.substring(num1.indexOf(min)+1);
count --;
}
}
System.out.println(builder);
}
}