0 0

急求解一算法(感谢)5

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

求一通用的java算法

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

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

问题补充:
Anddy 写道
引用
125,152,215,251,512,512,1025...排列
这是什么排列? 

就是将 152拆为单个数字为 1,2,5
然后把1,2,5进行组合,按从小到大排
排到最大数后,再添加一个0,就变成 0,1,2,5四个数字了
再从小到大排

问题补充:
Anddy 写道
部分伪代码实现,接下来Lz锻炼锻炼coding! 

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
	
}


while(index==0){//从数的最后一位开始,查找前一位比一位小的数。
if(arr[index]>arr[--index])break;
}
有问题吧?
2010年3月17日 12:03

7个答案 按时间排序 按投票排序

0 0

采纳的答案

部分伪代码实现,接下来Lz锻炼锻炼coding! 


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
	
}

2010年3月17日 12:58
0 0

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

2010年3月17日 18:19
0 0

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]));
		}
	}

2010年3月17日 18:18
0 0

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

2010年3月17日 14:06
0 0

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

2010年3月17日 12:27
0 0

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

2010年3月17日 12:26
0 0

引用
125,152,215,251,512,512,1025...排列
这是什么排列? 

2010年3月17日 12:18

相关推荐

Global site tag (gtag.js) - Google Analytics