删除K个数字,使得删除后的数字组成的数尽可能小

package test.com;

import java.util.Arrays;

//需求:删除K个数字,使得删除后的数字尽可能小
public class Hui05_Delete_K_Value {

    public static int[] backMinNum(int[] array, int k){
        int high = -1;
        int index = 0;
        while (k != 0){
            high = array[index];  //高位
            int i;
            boolean flag = true;
            for (i = index+1; i < array.length - 1; i++) {
                if(high > array[i]){
                    array[index] = -1;
                    flag = false;
                    break;
                }else
                    break;
            }
            if(flag == true){
                int pos = -1;
                for (int j = index; j < array.length - 1 ; j++) {
                    if(array[j] > array[j+1]){
                        pos = j;
                        array[pos] = -1;
                        break;
                    }
                }
                if(pos != j && array[array.length-1] >= array[array.length-2]){
                    array[array.length-1] = -1;  //删除最后一个数
                }
            }
            index++;
            k--;
        }

        return array;
    }
    public static void main(String[] args) {
    	//存在的问题就是,需要将数组中的-1去除,否则可能影响下一次的判断
    	//这里为了省事,没有将-1去除
        int[] arr = {5,4,1,2,7,0,9,3,6};
        System.out.println(Arrays.toString(arr));
        int[] arrMin = backMinNum(arr, 4);  //[-1, -1, 1, -1, -1, 0, 9, 3, 6]
        System.out.println(Arrays.toString(arrMin));

        System.out.println("========================");
       
        int[] arr3 = {5,5,5,5,9}; 
        int[] arr4 = {5,5,4,5,9};
        System.out.println(Arrays.toString(arr3));
        int[] arr4Min = backMinNum(arr3, 1);  
        System.out.println(Arrays.toString(arr4Min));

    }
}

修改版

public class Code09_Delete_K_Value {

    public static String backMinNum(String num, int k){
        String numNew = num;
        while (k != 0){
            boolean flag = false;
            for (int i = 0; i < num.length() - 1; i++) {
                if(numNew.charAt(i) > numNew.charAt(i+1)){
                    //将第i个元素删除
                    numNew = numNew.substring(0,i) + numNew.substring(i+1, numNew.length());
                    flag = true;
                    break;
                }
            }
            if(!flag){
                //删除最后一个数
                numNew = numNew.substring(0, numNew.length()-1);
            }
            //清除整数左侧为0的数
            //numNew = removeZero(numNew);
            if(numNew.length() == 0)
                return "0";
            k--;
        }
        return numNew;
    }
    public static String removeZero(String num){
		/*
		*
		*/
        return num;
    }
    public static void main(String[] args) {


        String num = "541270936";
        System.out.println(num);
        String arrMin = backMinNum(num, 3);
        System.out.println(arrMin);

        System.out.println("========================");
        String num2 = "55559";
        System.out.println(num2);
        String arr2Min = backMinNum(num2, 1);  
        System.out.println(arr2Min);

    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值