题目描述
给定一个正整数(<=255位),从中删去n位后,使得剩下的数字组成的新数最小(大);
思路:从左到右开始扫描,两两比较,如果是前一位比后一位大,则删去前大的一位,直到删完所有的n位;
【从论坛看到的一个题目,觉得挺好的,代码是论坛的大佬写的,不过好像没处理好以0开头的问题。】
再贴一个c写的吧,这也写得挺好的:https://blog.csdn.net/liveas/article/details/5732759
1 public static void main(String[] args) { 2 // TODO Auto-generated method stub 3 int i,j,k,length,n,m; 4 Scanner sc=new Scanner(System.in); //warning :leak: 'sc' is never closed 5 String s=sc.nextLine(); //输入的整型数; 6 char c; 7 n=sc.nextInt(); 8 int index; 9 sc.close(); 10 if(n>s.length()) //如果删除的长度比输入的整数本身还要大就报错; 11 { 12 System.out.println("Error!"); 13 return; 14 }for(i=0;i<n;i++) 15 { 16 j=0; //j重新从0下标开始; 17 while(j<s.length()) 18 { 19 if(j==s.length()-1) 20 { 21 s=s.substring(0, j); 22 break; 23 } 24 index=j+1; 25 c=s.charAt(index); 26 if(s.charAt(j)-'0'<=(c-'0')) 27 { 28 j++; 29 continue; 30 } 31 else 32 { 33 s=s.substring(0,j)+s.substring(index,s.length()); //把j位的字符截去; 34 break; 35 } 38 } 39 } 40 System.out.println(s); 41 }