java字母和数字排列组合后

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java字母和数字排列组合后相关的知识,希望对你有一定的参考价值。

要求0-9、a-z、A-Z一共62个数字和字母排列出所有的可能。例如:0、1、2、3、....0a、.....、012、.....

组合排列问题,用递归思想

1 选出组合

2 全排列(递归)

import java.util.ArrayList;
import java.util.List;

public class AllSort 
    /**
     * 从数组中选出所有组合
     * @param source
     * @param arrayList
     * @param num
     */
    public static void select(char[] source, List<String> arrayList, int num) 
        int lg = source.length;
        char[] temp = new char[num];
        System.arraycopy(source, 0, temp, 0, num);
        // 首次填充数组
        arrayList.add(new String(temp));
        // 逐个(位置)替换方式实现不重复全选
        for (int i = num; i < lg; i++) 
            for (int j = 0; j < num; j++) 
                char tempChar = temp[j];
                temp[j] = source[i];
                arrayList.add(new String(temp));
                temp[j] = tempChar;
            
        
    

    /**
     * 全排序
     * @param source
     * @param start
     * @param end
     */
    public static void perm(char[] source, int start, int end) 
        if (start == end) // 递归出口,最简单的情况,只取出1个
            for (int i = 0; i <= end; i++) 
                System.out.print(source[i]);
            
            System.out.println();
         else // 多个全排列
            for (int i = start; i <= end; i++) 
                char temp = source[start];// 逐位交换
                source[start] = source[i];
                source[i] = temp;

                perm(source, start + 1, end);// 递归全排列
                // 还原,为下个替换做准备
                temp = source[start];
                source[start] = source[i];
                source[i] = temp;
            
        
    
    
    public static void main(String[] args) 
          
      //char[] source =  \'0\', \'1\', \'2\', \'3\', \'4\', \'5\', \'6\', \'7\', \'8\', \'9\', \'Aa-Zz...\';
        char[] source =  \'0\', \'1\', \'2\', \'3\', \'4\',\'5\',\'6\',\'7\',\'8\',\'9\' ;
        ArrayList<String> list = new ArrayList<String>();
        for (int i = 1; i <= source.length; i++) 
            list.clear();
            //选出
            select(source, list, i);
            System.out.println("===========取出"+i+"个==============");
            //排列
            for (String str : list) 
                char[] temp = str.toCharArray();
                perm(temp, 0, temp.length - 1);
            
        
    
参考技术A lz的问题没看明白,你可以尝试这样写:
public static final String mixings = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
public static String getRandomStr(int length)
StringBuffer sb = new StringBuffer();
Random random = new Random();
for (int i = 0; i < length; i++)
sb.append(mixings.charAt(random.nextInt(mixings.length())));

return sb.toString();

length是你想要的字符串的长度;你如果想要1-62种长度的话再加一个for循环即可;这个结果可是相当大的,要慎重啊
参考技术B import java.util.ArrayList;
import java.util.List;

/**
* @author lyon_yao
*
*/
public class Test
public static void main(String []a)
List<String> list=new ArrayList<String>();
String value="0123456789abcdefghijklmnopqrstuvwmnxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
char[] chars=value.toCharArray();
for(char c:chars)
list.add(String.valueOf(c));

System.out.println(list);
List<String> result=new ArrayList<String>();
for(char c:chars)
result.add(String.valueOf(c));

new Test().run(list,1);

public void run(List<String> last,int index)
int size = last.size();
for(int j=0;j<size-index;j++)
String temp="";
for(int i=0;i<index&&i+j<size;i++)
temp+=last.get(j+i);

System.out.println(temp);

if(index<size)
run(last,++index);



你测试一下看是要的效果不
参考技术C public class TestPL 
static String[] array = "0","1","2","3";

public static void main(String[] args) 
for(int i=0;i<array.length;i++)
sort("",i+1);



public static void sort(String leftString, int leftLen)
if(leftLen == 0)
System.out.println(leftString);
return;

for(int i=0;i<array.length;i++)
if(leftString.indexOf(array[i]) != -1)
continue;
else
sort(leftString+array[i],leftLen-1);




如果你要的是排列的话,就是认为12和21是不同的可能,那么上面这段程序就能满足你的需求,自己增加要排列的项就可以了。如果认为12和21是不同的,那么需要一点改动。

参考技术D 62层循环嵌套,或使用递归

以上是关于java字母和数字排列组合后的主要内容,如果未能解决你的问题,请参考以下文章

排列组合

Python Itertools 仅排列字母和数字

分治法实现1-N的数字按字典序全排列组合 Java语言

10个数字有多少种排列组合?

java字符串排列组合查找

算法基数排序