一道求数程序题,求最高效率。

随便输入一个整数,输出第一个比它大的数。

比如123 下一个就是132 再者就是312

只要找出下一个即可

如果自己本身是最大的,则自动填零。比如987,则输出9870

能处理1到十位之间的数(要求高效率的)

部分伪代码实现,接下来Lz锻炼锻炼coding :D :D :D
[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]

代码实现请看:
http://www.iteye.com/problems/38009

一时间很难把完整的算法给你,但我可以给你算法:

看一组数据(这里五位举例):

[code="java"]
1 5 6 8 9 五个数,可以很多组合

这里不能完整的来算,要分位来算、

比如说,
第一步:a[0]~a[4]分别放万、千、百、十、个位的数字。
第二步:假如给定的数位58619,则先差分各个位上的数字分别放到a[0]~a[4]中
第三步:定义max = 五位数字中的最大数//这个应该不难,降序排序一下组合的数。
第四步:先判断给定数是否是最大数,如果是,后增加一位0//排除了意外情况了。
第五步:我们来做一下具体的数字分析,

5 8 6 [color=red]1 9[/color] 的下一个大它的数是:
5 8 6 [color=red]9 1[/color] 的下一个大它的数是:
5 8 [color=brown]9 1 6 [/color]的下一个大它的数是:
5 8 [color=brown]9 6 1[/color] 的下一个大它的数是:
5 9 1 6 8 的下一个大它的数是:
5 9 1 8 6

仔细观察会发现规律,这里换为最低是最后两位。
1。如果最后两位a[3] a[4]是按从小到大排列,这里是 1 9 那么下一组数据是这两个数据的换位。58619 下个比他大的就是58691了。
2。如果最后两位a[3] a[4]是按从大到小的排列,那么要考虑到前一位,这里是a[2]位,首先a[3] a[4]中比a[2]大的数据换到a[2]位置,后面两个a[3] a[4] 按从小到大排列就行了,不必计算,这里,58691 将a[3]=9替换到a[2],后面还剩 6和1,从小到大排列所以结果为 589[color=red]16[/color]

总的规律还需你去好好琢磨。应该总结为:如果最后两位:如果是 从小到大排列,那么下一位数肯定是将最后两个数从打到小排列。如果最后两位从大道小排列了,那么前一位和替换为他们中间最大的数,然后后面的的三位数从小到大排列。在往下找的话,又符合前面的情况了,可以用递归实现。具体实现算法就不去研究了。

[/code]

[code="java"]
package test;

import java.util.Arrays;

public class Test {
public static void main(String[] args) {
int[] ary = { 7, 6, 4, 3, 2, 1, 1, 8 };
int[] tempAry = Arrays.copyOf(ary, ary.length);
for (int i = 0; i < ary.length - 1; i++) {
if (ary[i] < ary[i + 1]) {
int temp = ary[i];
ary[i] = ary[i + 1];
ary[i + 1] = temp;
for (int j = 0; j < ary.length; j++) {
System.out.print(ary[j] + ",");
}
break;
}
}
if (Arrays.equals(ary, tempAry)) {
for (int i = 0; i < tempAry.length; i++) {
System.out.print(ary[i] + ",");
}
System.out.print("0");
}

}

}
[/code]

[code="java"]
package test;

public class Test {
public static void main(String[] args) {
int[] ary = { 7, 6, 4, 3, 2, 1, 1, 8 };
int k = 0;
for (int i = 0; i < ary.length - 1; i++) {
if (ary[i] < ary[i + 1]) {
int temp = ary[i];
ary[i] = ary[i + 1];
ary[i + 1] = temp;
for (int j = 0; j < ary.length; j++) {
System.out.print(ary[j] + ",");
}
break;
} else {
k++;
}
}
if (k == ary.length - 1) {
for (int i = 0; i < ary.length; i++) {
System.out.print(ary[i] + ",");
}
System.out.print("0");
}
}
}

[/code]