给出一个整数,从该整数中去掉k个数字,要求剩下的数字形成的新整数尽可能小。应该如何选取被去掉的数字?
/**
* @Author: subd
* @Date: 2019/9/10 7:48
* 删去k个数字后的最小值
*/
public class RemoveKDigits {
public static String removeRemoveKDigits(String num, int k) {
String numNew = num;
for (int i = 0; i < k; i++) {
boolean hasCut = false;
//从左向右遍历,找到比自己右侧数字大的数字并删除
for (int j = 0; j < numNew.length() - 1; j++) {
if ((numNew.charAt(j)) > numNew.charAt(j + 1)) {
numNew = numNew.substring(0, j) + numNew.substring(j + 1, numNew.length());
hasCut = true;
break;
}
}
//如果没有找到要删除的数字,则删除最后一个数字
if (!hasCut) {
numNew = numNew.substring(0, numNew.length() - 1);
}
//清除整数左侧的数字0
numNew = removeZero(numNew);
}
//如果整数的所有数字都被删除了,直接返回0
if (numNew.length() == 0) {
return "0";
}
return numNew;
}
private static String removeZero(String num) {
for (int i = 0; i < num.length() - 1; i++) {
if (num.charAt(0) != '0') {
break;
}
num = num.substring(1, num.length());
}
return num;
}
public static void main(String[] args) {
System.out.println(removeRemoveKDigits("1593212", 3));
System.out.println(removeRemoveKDigits("30200", 1));
System.out.println(removeRemoveKDigits("10", 2));
System.out.println(removeRemoveKDigits("24357634567", 3));
System.out.println(removeRemoveKDigits("1593654212", 3));
}
}
377

被折叠的 条评论
为什么被折叠?



