現有二維陣列String [][] arr3 = new String[][]{{"A","B"},{"C","D","G"},{"E","F"}};
怎么樣才能輸出 ACE,ADE,AGE,ACF,ADF,AGF,BCE,BDE,BGE,BCF,BDF,BGF
(陣列長度不固定,小陣列內長度也不固定)
uj5u.com熱心網友回復:
這種排列組合的問題,回答過太多了給你寫個例子,自己理解吧
public class Sample {
public static void main(String[] args) {
String [][] arr3 = new String[][]{{"A","B"},{"C","D","G"},{"E","F"}};
int[] idx = new int[arr3.length];
for (int i=0; i<idx.length; i++) idx[i] = 0;
while (idx[0]<arr3[0].length) {
for (int i=0; i<idx.length; i++) {
System.out.printf("%s", arr3[i][idx[i]]);
}
System.out.println();
idx[idx.length-1]++;
for (int i=idx.length-1; i>0; i--) {
if (idx[i] >= arr3[i].length) {
idx[i] = 0;
idx[i-1]++;
}
}
}
}
}如果理解不了,可以參考以下帖子的思路說明(模擬進位的方式)
https://bbs.csdn.net/topics/397288252
uj5u.com熱心網友回復:
跟你的逾期結果順序不一致,可以吧。排列組合演算法。 private static List<String[]> makeStr(List<String[]> arr) {
//思路就是遞回拼前陣列前兩個,然后把拼完的當做一個字符陣列與剩余的陣列再組成一個新的二維陣列,再次遞回呼叫。
if (arr.size() <= 1) {
return arr;
} else {
String[] stringlist1 = arr.get(0);
String[] stringlist2 = arr.get(1);
String[] strings = new String[stringlist1.length * stringlist2.length];
for (int i = 0; i < stringlist1.length; i++) {
for (int j = 0; j < stringlist2.length; j++) {
strings[j+stringlist2.length*i] = stringlist1[i]+stringlist2[j];
}
}
List<String[]> anotherArr = new ArrayList<String[]>();
anotherArr.add(strings);
for(int i = 2; i< arr.size();i++){
anotherArr.add(arr.get(i));
}
return makeStr(anotherArr);
}
}uj5u.com熱心網友回復:
感謝??uj5u.com熱心網友回復:
感謝??uj5u.com熱心網友回復:
專業笨辦法
private static String[] getArr(String[] arr1, String[] arr2) {
String[] strs = new String[arr1.length*arr2.length];
int index=0;
for (int i = 0; i < arr1.length; i++) {
String str="";
for (int j = 0; j < arr2.length; j++) {
str=arr1[i];
str+=arr2[j];
strs[index++] = str;
}
}
return strs;
}
public static String[] func(String[][] arr) {
if(arr==null) {
return null;
}
if(arr.length<=1) {
return arr[0];
}
for (int i = 1; i < arr.length; i++) {
String[] s = new String[arr[i-1].length*arr[i].length];
s = getArr(arr[i-1],arr[i]);
arr[i] = s;
}
return arr[arr.length-1];
}
uj5u.com熱心網友回復:
看大佬啟發寫的
String [][] arr3 = new String[][]{{"A","B"},{"C","D","G"},{"E","F"}};
int[] idx = new int[arr3.length];
int i=0;
while(idx[arr3.length-1]<arr3[arr3.length-1].length){
for (i=0;i<idx.length;i++)
System.out.print(arr3[i][idx[i]]);
i=0;
System.out.println();
idx[i]++;
while(i<arr3.length-1&&idx[i]>=arr3[i].length){
idx[i]=0;
idx[++i]++;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/26038.html
標籤:Java EE
上一篇:龍書的最小dfa
