有一2维数组,比如:String[][] a={{1,2},{3},{4},{5,6}};
求这些数字一共可以组合多少种排列,并打印所有可能情况
比如上面的数字可以有这些情况:1345,1346,2345,2346
最好不要递归,速度要快!
有一2维数组,比如:String[][] a={{1,2},{3},{4},{5,6}};
求这些数字一共可以组合多少种排列,并打印所有可能情况
比如上面的数字可以有这些情况:1345,1346,2345,2346
最好不要递归,速度要快!
下面是采用广度优先遍历的代码,我已经测试过了
[code="java"]
/*有一2维数组,比如:String[][] a={{1,2},{3},{4},{5,6}};
求这些数字一共可以组合多少种排列,并打印所有可能情况
比如上面的数字可以有这些情况:1345,1346,2345,2346
最好不要递归,速度要快! */
import java.util.LinkedList;
//采用广度优先遍历
public class BroadFirst {
//用于存储遍历情况的列表
private LinkedList<String> list=new LinkedList<String>();
//传入的参数
private String[][] para=null;
public BroadFirst(String[][] para){
this.para=para;
//将第一个列表添加到遍历列表的前端
for(String str:this.para[0]){
this.list.addLast(str);
}
//产生序列
this.createSequence();
}
private void createSequence() {
int innerLength = 1;
while (true) {
String temp = this.list.pollFirst();
innerLength = temp.length();
// 深度够了则执行完成
if (innerLength == para.length) {
this.list.addFirst(temp);
return;
} else {
for (String innerStr : this.para[innerLength]) {
// 依次入队列的末端
this.list.addLast(temp + innerStr);
}
}
}
}
public void printString(){
for(String str:this.list){
System.out.println(str);
}
}
//测试
public static void main(String[] args) {
String[][] temp={{"1","2"},{"3"},{"4"},{"5","6"},{"7","8"}};
BroadFirst bf=new BroadFirst(temp);
bf.printString();
}
}
[/code]