一种变形全排列算法


public static boolean next(int[] count, int[] idx){
idx[0] = idx[0] + 1;

for(int i=0; i<idx.length; i++){
if(idx[i]>=count[i]){
if(i==idx.length-1){
return false;
}
idx[i+1] = idx[i+1] +1;
idx[i] = 0;
}else{
return true;
}
}
return false;
}

public static void genNames(){
String[] fileds = {
"赵钱",
"红青紫",
"花云天山海",
};
int[] counts = new int[fileds.length];
int[] idxs = new int[fileds.length];
for(int i=0; i<fileds.length; i++){
counts[i] = fileds[i].length();
idxs[i] = 0;
}
do {
String name = "";
for(int i=0; i<fileds.length; i++){
name += fileds[i].charAt(idxs[i]);
}
//System.out.print(name);
System.out.println(name);
}while (next(counts, idxs));

}

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



运行结果:
============================

赵红花
钱红花
赵青花
钱青花
赵紫花
钱紫花
赵红云
钱红云
赵青云
钱青云
赵紫云
钱紫云
赵红天
钱红天
赵青天
钱青天
赵紫天
钱紫天
赵红山
钱红山
赵青山
钱青山
赵紫山
钱紫山
赵红海
钱红海
赵青海
钱青海
赵紫海
钱紫海
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值