JAVA算法题----JAVA工程师的一道算法题:

本文介绍了一个使用Java实现的算法,该算法能够生成指定数量的麻将筛子的所有可能不重复排列组合,并通过排序确保输出结果的有序性。

题目大致如下:

有N(N>=2)个麻将筛子,写出N个麻将排列组合,要求,不能重复如(1,1,2)和(1,2,1)是相同的;

当N=3是输出如下:

1,1,2

1,1,3 

JAVA实现代码如下:


import java.util.Arrays;
import java.util.Vector;
import java.util.HashMap;
import java.util.Iterator;
public class ShowBox {
    static HashMap hashmap = new HashMap();
  
    public  static void ShowBox(int i){
      char [] number ={'1','2','3','4','5','6'};
      char [] num = new char[i];
      int size = ShowList(number,num,1,i);
      System.out.println("总数如下:"+hashmap.size());
     Iterator it = hashmap.values().iterator();
      String []rlt=new String[hashmap.size()];
      int ind=0;
     while(it.hasNext()){
      
         String result = (String) it.next();
         rlt[ind]=result;
         ind++;
        // System.out.println(result);
         // Arrays.sort(rlt);
     }
     Arrays.sort(rlt);
    System.out.println("sie"+rlt.length);
     for(int mq =0;mq<rlt.length;mq++){
      System.out.println(rlt[mq]);
     }
    }
    public static String[] sort(String [] str){
    String result="";
    String A,B;
    int index=1;
    for(int i=1;i<str.length;i++){

       if(Integer.parseInt(str[i-1])>Integer.parseInt(str[i])){
           A = str[i-1];
           B = str[i];
           str[i-1]= B;
           str[i] =A;
           sort(str);
       }

    }
     return str;

 }

public static String outstr(String [] ms){
   String result="";
   String [] pa = sort(ms);

   for(int i=0;i<pa.length;i++){
       result = result + pa[i]+",";
   }
   int num = result.length();
    return result.substring(0,num-1);
}
    public static void soct(char[] put){
        String key="";
        String obj="";
        char [] buffer = put;
       for(int i=0;i<buffer.length;i++)
       {
           obj = obj + buffer[i]+",";
           key = key + buffer[i]+",";
       }
       key =outstr(key.split(","));
       obj =outstr(obj.split(","));
        hashmap.put(key,obj);
    }
    public static char[] sort(char [] num){
        int next=0;
        char A,B;
        char [] mc = new char[num.length];
         mc = num;
        System.out.println(num);
       for(int i=0;i<mc.length;i++){
          next = i+1;
          if(next>mc.length-1){
           next=mc.length-1;
          }
           if(mc[i]>mc[next])
           {
                A = mc[next];
                B  = mc[i];

               mc[next]=B;
               mc[i]=A;
               sort(mc);
           }
       }
       System.out.println(mc);
       return mc;
   }

    public static int ShowList(char [] number,char[] num,int index,int count)
    {
        for(int i=0;i<number.length;i++){
     
          num[index-1]=number[i];
          if(index==count)
          {
              char [] cm = num;
               soct(cm);
            
          }else{
               ShowList(number,num,index+1,count);
          }


        }


    return 0;
    }
    public static void main(String args[])
    {

     ShowBox(3);
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值