java问题,高手进来
public class Resolve {
static final int DIGITS = 5;
static ArrayList<List<Integer>> results= new ArrayList<List<Integer>>();
static HashSet<Integer> repeatSet = new HashSet<Integer>();
public static int[] digitNumArray(int num){
int[] array = new int[DIGITS];
for(int i=1,j=getBoundary();i<=DIGITS;i++){
int k = num/j;
for(int l=0;l<DIGITS;l++){
if(array[l]==0){
array[l]=k;
break;
}else if(array[l]>k){
for(int m=DIGITS-1;m>l;m--){
array[m]=array[m-1];
}
array[l]=k;
break;
}
}
num=num-k*j;
j=j/10;
}
return array;
}
public static int max(int[] digitNums){
int result=0;
for(int i=DIGITS-1;i>=0;i--){
result=result*10+digitNums[i];
}
return result;
}
public static int min(int[] digitNums){
int result=0;
for(int i=0;i<DIGITS;i++){
result=result*10+digitNums[i];
}
return result;
}
public static int nextNum(int currentNum){
int[] array = digitNumArray(currentNum);
int result= max(array)-min(array);
return result;
}
public static int getBoundary(){
int boundary=1;
for(int i=2;i<=DIGITS;i++){
boundary=boundary*10;
}
return boundary;
}
public static boolean isLegal(int num){
int boundary= getBoundary();
if(num>=boundary && num<boundary*10){
return true;
}
return false;
}
public static void checkAndSaveLoopNum(int num){
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(num);
num=nextNum(num);
while(isLegal(num) && !repeatSet.contains(num)){
if(list.contains(num)){
int beginPos = list.indexOf(num);
List<Integer> loopNums = list.subList(beginPos, list.size());
results.add(loopNums);
for(Integer i : loopNums){
repeatSet.add(i);
}
return;
}
list.add(num);
num=nextNum(num);
}
}
public static void displayResults(){
for(List<Integer> list : results){
System.out.println(list.toString());
}
}
public static void main(String[] args){
final int num=getBoundary();
for(int i=num;i<num*10;i++){
checkAndSaveLoopNum(i);
}
//checkAndSaveLoopNum(82962);
displayResults();
}
}