日期:2014-05-20 浏览次数:20722 次
package com.test;
public class MinInt {
/**
* 输入一个高精度的正整数n(n<10位),去掉任意s个数字后剩下的数字按原左右次序组成一个新的正整数,
* 寻求一种方案,使得新的正整数最小。
* number: 输入的正整数
* n:要去掉的数字个数
*/
public static int findMinNumber(Integer number,int n)
{
String result = "";
String numberStr = number+"";
int length = numberStr.length();
if(length<=n)
{
return number;
}
//循环length-n次,每一次找出一个数字
boolean isFirstNumber = true;
for(int i=0;i<length-n;i++)
{
int[] array = findMinDigit(numberStr,length-n-i-1,isFirstNumber);
result+=array[0];
numberStr = numberStr.substring(array[1]+1);
isFirstNumber = false;
}
return Integer.parseInt(result);
}
/**
*
* @param number 输入的正整数,字符串形式
* remind 后面要包含几个数字
* isFirstNumber 是否是第一个数字
* @return 返回这个字符串中最小的数字,这个数字后面一定要有remind个数
*
*/
public static int[] findMinDigit(String number,int remind,boolean isFirstNumber)
{
int length = number.length();
int min = number.charAt(0)-'0';
int position = 0;
for(int i=1;i<length-remind;i++)
{
int t = number.charAt(i)-'0';
//第一个数字不能是0
if(t == 0 && isFirstNumber)
{
continue;
}
if(t<min)
{
min = t;
position = i;
}
}
return new int[]{min,position};
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("result="+findMinNumber(403145983, 6));
}
}