急求解一算法(感谢)

题:求一下个数
给出一个数字 152,它以125,152,215,251,512,512,1025...排列(位数不足补0)
现在要得到 152 后面的下一个数,即答案是512

求一通用的java算法

列(给出以下3个数字):
115
1051
6233
结果输出:
151
1105
6323

希望高手帮我解决下,感谢!

部分伪代码实现,接下来Lz锻炼锻炼coding! :o :o
[code="java"]

public class Util(){

public int parse(int argInput){
//将整数单个分解存于数组arr中。
String str = argInput+"";
int length =str.length();
int[] arr = new int(length );
for(int i = 0;i<length;i++){
arr[i]=Integer.parseInt(str.substring(i,i+1));
}
int index = length -1;
while(index==0){//从数的最后一位开始,查找前一位比一位小的数。
    if(arr[index]>arr[--index])break;
    }

if(index==0){//添加一个0,处理.这中情况如“321”

//将0放在数组的第二个位置,数组的第一个位置放原来数值中的最小数,比如321中的“1”
//这是数组为“1 0 ..”
...
//数组第二个位置后面的数从小到大排列。
...

}else{//不添加0 这种情况如“2563”

//将index位置的值与index-1的值互换。如将6与5互换,“2653”。
...
//将index后面(包含index位置)的数值从小到大排列。这时将“5 3”从小到大排列。
...
}
///将int数组arr各个数值按顺序生成一个整数。返回所需要的值。

}//end parse

}
[/code]

[quote]125,152,215,251,512,512,1025...排列[/quote]这是什么排列? :o :o

按照你的说法,那512也不会出现两次!

应该是125 152 215 251 512 521 。。。吧,

还望lz谅解,用记事本写的。while的条件index!=0 :D :D :D

[code="java"]
public String nextNum(int num){
String src = String.valueOf(num);
String result = "";
int len = src.length();
int[] arr = new int[len];
for(int k = 0;k < len; k++){
arr[k] = Integer.parseInt(src.substring(k,k+1));
}
int i=0,j=0;
for(i = len-1; i >= 0; i--){
boolean flag = false;
for(j = i - 1; j>=0; j--){
if(arr[i]>arr[j]){
int ai = arr[i];
for(int k = i; k>j;k--){
arr[k] = arr[k-1];
}
arr[j] = ai;
for(int k = 0; k < arr.length; k++){
result += arr[k];
}
return result;
}

        }
    }
    //
    if(i==-1&&j==-1){
         List   list   =   new   ArrayList();   
         for(i= 0;i <arr.length;i++)   
              list.add(arr[i]);   
         Collections.sort(list);//升序  
         int index = 0;
         for(i = 0 ; i <list.size(); i++){
             int a = Integer.parseInt(list.get(i).toString());
             if(a>0){
                 index = i;
                 break;
             }
         }
         result = list.get(index).toString();
         result += "0";
         list.remove(index);
         for (i = 0; i < list.size(); i++) {
             result += list.get(i).toString();
         }
         return result;
    }
    return result;
}

public void test111(){
    int[] arrNum = {115,1051,6233,521,321,7123};
    for(int i = 0; i < arrNum.length; i++){
        System.out.println(nextNum(arrNum[i]));
    }
}

[/code]

结果差点忘了
151
1105
6323
1025
1023
7132