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字母和数字排列组合后的主要内容,如果未能解决你的问题,请参考以下文章