算法问题-删除k个数字是num最小
删除k个数字是num最小
案例:
5 4 1 2 7 0 9 3 6 删掉一个数字后是 4 1 2 7 0 9 3 6
123456; //12345
0000 //0
package algorithm.removedigits;
public class RemoveDIgits {
/**
* 删掉k个数字使当前留下的数字最小
* 5 4 1 2 7 0 9 3 6 删掉一个数字后是 4 1 2 7 0 9 3 6
*
* @param num
* @return
*/
public static int removeDigits(int num, int k) {
//如果所有位数都是0 直接返回0 就好
if(num == 0){
return 0;
}
StringBuffer sb = new StringBuffer();
String n = String.valueOf(num);
char[] chars = n.toCharArray();
//遍历到第几位的索引
int index = 0;
for (int j = 0; j < k; j++) {
for (int i = 1; i < chars.length; i++) {
if (chars[i] < chars[i - 1]) {
sb.append(chars[i]);
break;
} else {
sb.append(chars[i - 1]);
}
index = i;
}
}
//index + 1 是因为遍历的索引是当前比较过的位置,所以要从下一位开始
//加k是因为原数组已经被截取了k位,所以也要算上
//需要考虑本题必须截取k位,所以如果是123456 k = 1,那么返回结果是12345 6要截取掉
for (int i = index + 1+ k; i < chars.length; i++) {
sb.append(chars[i]);
}
return Integer.valueOf(sb.toString());
}
public static void main(String[] args) {
// int num = 541270936; //51270936
// int num = 123456; //12345
int num = 00000; //0
int k = 1;
System.out.println(removeDigits(num, k));
}
}
不恋尘世浮华,不写红尘纷扰