删除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)); } }
不会,我可以学;落后,我可以追赶;跌倒,我可以站起来!