给一个正整数
NUM1
,计算出新正整数
NUM2
,
NUM2
为
NUM1
中移除
N
位数字后的结果,
需要使得
NUM2
的值最小。
输入描述:
1.
输入的第一行为一个字符串,字符串由
0-9
字符组成,记录正整数
NUM1
,
NUM1
长度小
于
32
。
2.
输入的第二行为需要移除的数字的个数,小于
NUM1
长度。
如:
2615371
4
输出描述:
输出一个数字字符串,记录最小值
NUM2
。
如:
131
/**
* 解题思路:
* 1、首选确保第一位一定是可选择的数字中最小的,需要保证移除之后的数字的个数可以满足要求(范围最大化,左下标0开始,右下标至可选择的最大范围);
* 2、确定完第一个数字之后,将下标移动至第一个数字下标的后面,然后范围的数据也需要向后加一位(即截取字符串的右下标);
* 3、确认完第二位之后,确认第三位,依次类推,将获取到的数据拼接为字符串输出即可。
*/
public class GetMinNum {
public static void main(String[] args) {
Scanner in =new Scanner(System.in);
String num1=in.nextLine();
int size=in.nextInt();
String minNum = getMinNum(num1, size);
System.out.println(minNum);
}
public static String getMinNum(String num1,int size){
int leftIndex=0;
int rightIndex=size+1;
String result="";
while (result.length()<num1.length()-size){
int min=Integer.MAX_VALUE;
String str=num1.substring(leftIndex,rightIndex);
int[] nums=new int[str.length()];
for (int i=0;i<str.length();i++){
nums[i]=str.charAt(i)-'0';
if(result.equals("") &&nums[i]==0){
continue;
}
min=Math.min(min,nums[i]);
}
result+=String.valueOf(min);
for (int i=0;i<nums.length;i++){
if (nums[i]==min){
leftIndex+=i;
}
}
rightIndex++;
leftIndex++;
}
return result;
}
}