有一个十进制正整数,移除其中的K个数,使剩下的数字是所有的可能中最大的

问题:有一个十进制正整数,移除其中的K个数,使剩下的数字是所有的可能中最大的。

假设:字符串的长度一定大于等于K

字符串不会以0开头

package demo.algorithm;

/**
 * 问题:在m个数中移除n个数,找出剩下的数中的最大值
 * 思路:从高位开始找,在前m-n+1位数中找到一个位置在k的最大值V,将m中k后到最后的子串作为新的m,n-1作为新的n,再次执行前面方法找出新的V,
 * 依次递归,找出所有的v,最后所有V连着一起即为最大值
 */
public class Main {
	public static void main(String[] strs) {
		StringBuilder result = new StringBuilder();
		String queues = "8635273";
		int key = 5;
		QueryMax(result, queues, key);
		System.out.println(result);
	}

	// 从queues中移除key个数,确保剩下的数目是最大的
	public static void QueryMax(StringBuilder result, String queues, int key) {
		if (queues.length() < key) {
			System.out.print("illegal input");
		}
		int m = queues.length() - (key - 1);

		// leaveQ是前m-k+1位数的子串
		String leaveQ = queues.substring(0, m);
		// leaveQ是前m-k+1位数后的子串
		String queuesC1 = queues.substring(m, queues.length());
		String queuesC2 = "";

		// 找出子串中最大的值
		int flagK = 0, flagV = 0;
		for (int i = 0; i < leaveQ.length(); i++) {
			if (flagV < Integer.valueOf(leaveQ.charAt(i))) {
				flagV = Integer.valueOf(leaveQ.charAt(i));
				flagK = i;
			}
		}

		// 将最大值V连接在一起
		result = result.append(leaveQ.charAt(flagK));

		// 拼接新的子串作为m
		queuesC2 = leaveQ.substring(flagK + 1, leaveQ.length());
		String queuesC = queuesC2 + queuesC1;
		
		//k-1进入下一次的迭代
		key--;
		if (key > 0) {
			QueryMax(result, queuesC, key);
		}
	}
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值