移除 K 位得到最小值

描述

 

有一行由正数组成的数字字符串,移除其中的 K 个数,使剩下的数字是所有可能中最小的。

假设:
 字符串的长度一定大于等于 K
 字符串不会以 0 开头

输入

一行由正整数组成的数字字符串,和一个正整数 K,两个数据由英文逗号隔开,如:1432219,3。

输出

 

移除 K 位后可能的最小的数字字符串。
如 1432219 移除 4, 3, 2 这 3 个数字后得到 1219,为所有可能中的最小值。

 

输入样例:

1432219,3
10200,1

输出样例

1219
200

思路:根据题目设需要删除的数字M,长度为LEN, 删除的位数为N, 用index表示当前删除的数字个数

如果第 i 位比 i+1 大,则需要删除第i位;(此处我因为用的数组,所以删除用的比较笨的办法,就是将i后面所有的数字像前移动以为,最后一位用空格处理);同时需要将i重新开始,index++;

如果第i位小于等于(i+1)此时我们需要判断:(i+N)与LEN的关系,如果相等, 此时我们需要将i 之后的数字向前移动一位,并且将i复位到第一个位置,同时index++。否则i++;

代码:

private static String solution(String line) {
  String[] strs = line.split(",");
  String strcount = strs[1].trim();
  int count = Integer.valueOf(strcount);
  char[] charArr = strs[0].toCharArray();
  long len = strs[0].length();

  if (len == count) {
    return 0 + "";
  }
  int index = 0;
  int i = 1;
  while (index < count && i < len) {
    if (charArr[i - 1] <= charArr[i]) {
      if (i + count == len) {
          for (;i < len - index; i++) {
            if(i == len - index - 1){
              charArr[i] = ' ';
            }else {
              charArr[i] = charArr[i + 1];
            }
        }
        index++;
        i=1;
      } else {
        i++;
      }
    } else {
      for(int j=i-1; j<len-index; j++){
        if(j == len - index - 1){
          charArr[j] = ' ';
        }else{
          charArr[j] = charArr[j + 1];
        }
      }
      index++;
      i = 1;
    }
  }
  String resut = String.valueOf(charArr).trim();
  return Long.valueOf(resut.isEmpty() ? "0" : resut) + "";
}

代码还有很多可以优化的,写得不好,请留言一起改进!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值