题:求一下个数
给出一个数字 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