删数问题
来源:互联网 发布:java ee 新闻策划案例 编辑:程序博客网 时间:2024/06/10 13:02
题目描述:
键盘输入一个高精度的正整数N(此整数中没有‘0’),去掉其中任意S个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数最小。 输出应包括所去掉的数字的位置和组成的新的正整数。(N不超过240位)
样例输入
175438
4
样例输出
13
思路:(典型的贪心策略,方法就是从简单入手,慢慢复杂。从n=1开始推导就会发现规律)
现在假设有一个数,124682385,假如n = 1,则结果为12462385。n = 2,结果为1242385。可以知道:最优解是删除出现的第一个左边>右边的数,因为删除之后高位减小,很容易想...那全局最优解也就是这个了,因为删除S个数字就相当于执行了S次删除一个数,因为留下的数总是当前最优解...
代码如下:
/** * 删数问题 * @author mastery * */public class NumberDelete {// 需要删除的数private String number;// 需要删除的数字个数private int deleteSeveral;public NumberDelete(String number, int deleteSeveral) {this.number = number;this.deleteSeveral = deleteSeveral;}public NumberDelete() {super();}public String getNumber() {return number;}public void setNumber(String number) {this.number = number;}public int getDeleteSeveral() {return deleteSeveral;}public void setDeleteSeveral(int deleteSeveral) {this.deleteSeveral = deleteSeveral;}private String delete() {char[] arrayChar = number.toCharArray();int index = 0 , count = 0;int len = arrayChar.length;while(index < len - 1) {if(arrayChar[index] > arrayChar[index+1]) {CharUtil.deleteChar(arrayChar, index);index = -1;len--;// 记录删除的次数count++;}if(count == deleteSeveral) {break;}index ++;}return String.valueOf(arrayChar);}public String deleteResult() {String deleteNumber = delete();return deleteNumber.substring(0 , deleteNumber.length() - deleteSeveral);}private static class CharUtil {public static void deleteChar(char[] arrayChar , int index) {for(int i = index ; i < arrayChar.length - 1 ; i++) {arrayChar[i] = arrayChar[i + 1];}}}public static void main(String[] args) {NumberDelete nd = new NumberDelete("178543" , 4);System.out.println(nd.deleteResult());}}
0 0
- 删数问题
- 删数问题
- 1298 删数问题
- 删数问题
- 【贪心】删数问题
- 【贪心】删数问题
- 删数问题 队内赛
- 删数问题
- 删数问题
- 8605 删数问题
- 删数问题
- 删数问题
- 删数问题
- 删数问题
- 删数问题
- 删数问题
- sdut2072 删数问题
- 删数问题
- 黑马程序员——Java基础学习笔记(二)
- Summary of differences between Java versions?
- 1021.Deepest Root
- 测试点分析要点
- JS中innerHTML、outerHTML、innerText、outerText的用法与区别
- 删数问题
- 合泰云天郭庆:云清洗三打DDoS
- uboot下载地址
- .Net程序员玩转Android开发---(19)Android IntentService服务
- ViewPager+FragmentTabhost 解决办法
- MyEclipse10.0安装配置pydev插件
- 删除指定轮廓
- nginx http 跳转到https
- linux之cut用法