sky4160864
2010-03-17 12:03
浏览 246
已采纳

急求解一算法(感谢)

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

求一通用的java算法

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

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

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

7条回答 默认 最新

  • qwe_rt 2010-03-17 12:58
    已采纳

    部分伪代码实现,接下来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]

    已采纳该答案
    打赏 评论
  • qwe_rt 2010-03-17 12:18

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

    打赏 评论
  • qwe_rt 2010-03-17 12:26

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

    打赏 评论
  • qwe_rt 2010-03-17 12:27

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

    打赏 评论
  • qwe_rt 2010-03-17 14:06

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

    打赏 评论
  • hao117 2010-03-17 18:18

    [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]

    打赏 评论
  • hao117 2010-03-17 18:19

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

    打赏 评论

相关推荐 更多相似问题