
java字母和数字排列组合后 5
要求0-9、a-z、A-Z一共62个数字和字母排列出所有的可能。例如:0、1、2、3、....0a、.....、012、........
要求0-9、a-z、A-Z一共62个数字和字母排列出所有的可能。例如:0、1、2、3、....0a、.....、012、.....
展开
5个回答
展开全部
组合排列问题,用递归思想
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);
}
}
}
}
展开全部
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循环即可;这个结果可是相当大的,要慎重啊
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循环即可;这个结果可是相当大的,要慎重啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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);
}
}
}
你测试一下看是要的效果不
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);
}
}
}
你测试一下看是要的效果不
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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是不同的,那么需要一点改动。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
62层循环嵌套,或使用递归
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询