算法问题-删除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));
    }
}

posted @ 2021-11-26 10:11  小傻孩丶儿  阅读(67)  评论(0编辑  收藏  举报