描述
有一行由正数组成的数字字符串,移除其中的 K 个数,使剩下的数字是所有可能中最小的。
假设:
字符串的长度一定大于等于 K
字符串不会以 0 开头
输入
一行由正整数组成的数字字符串,和一个正整数 K,两个数据由英文逗号隔开,如:1432219,3。
输出
移除 K 位后可能的最小的数字字符串。
如 1432219 移除 4, 3, 2 这 3 个数字后得到 1219,为所有可能中的最小值。
输入样例:
1432219,3
10200,1
输出样例
1219
200
思路:根据题目设需要删除的数字M,长度为LEN, 删除的位数为N, 用index表示当前删除的数字个数
如果第 i 位比 i+1 大,则需要删除第i位;(此处我因为用的数组,所以删除用的比较笨的办法,就是将i后面所有的数字像前移动以为,最后一位用空格处理);同时需要将i重新开始,index++;
如果第i位小于等于(i+1)此时我们需要判断:(i+N)与LEN的关系,如果相等, 此时我们需要将i 之后的数字向前移动一位,并且将i复位到第一个位置,同时index++。否则i++;
代码:
private static String solution(String line) {
String[] strs = line.split(",");
String strcount = strs[1].trim();
int count = Integer.valueOf(strcount);
char[] charArr = strs[0].toCharArray();
long len = strs[0].length();
if (len == count) {
return 0 + "";
}
int index = 0;
int i = 1;
while (index < count && i < len) {
if (charArr[i - 1] <= charArr[i]) {
if (i + count == len) {
for (;i < len - index; i++) {
if(i == len - index - 1){
charArr[i] = ' ';
}else {
charArr[i] = charArr[i + 1];
}
}
index++;
i=1;
} else {
i++;
}
} else {
for(int j=i-1; j<len-index; j++){
if(j == len - index - 1){
charArr[j] = ' ';
}else{
charArr[j] = charArr[j + 1];
}
}
index++;
i = 1;
}
}
String resut = String.valueOf(charArr).trim();
return Long.valueOf(resut.isEmpty() ? "0" : resut) + "";
}
代码还有很多可以优化的,写得不好,请留言一起改进!