[英]Recursively creating strings from 2 dimensional character array
我需要從2d數組創建所有可能的字符串,以便第一個字符來自charArray[0]
,第二個字符來自charArray[1]
...,最后一個字符來自charArray[keyLength-1]
。
例:
輸入:
char[][] charArray =
{{'m','M','L','S','X'}
{'e','E','o','N','Z'}
{'o','G','F','r','Y'}
{'D','H','I','J','w'}};
輸出:
{meoD, meoH, meoI,..., XZYJ, XZYw} //in an Array or ArrayList
我有一個charArray[0]
解決方案,它以charArray[0]
中的每個字符為根構建了一個樹,並且進行了深度優先的字符串構造,但是JVM耗盡了charArray長度小於12的內存。我通常會采用迭代方法,但是charArray長度(即鍵字符串長度)是在運行時確定的,我想找到一個比在鍵字符串長度上編寫switch語句並手動為有限數量的鍵字符串長度編寫循環的更完整的解決方案。
我在程序的這一小部分停留的時間比我想承認的要長,因此任何幫助將不勝感激!
解決方法如下:
import java.util.ArrayList;
import java.util.List;
public class Arrays2D {
public static void main(String[] args) {
//input keys
String[][] charArray =
{{"m","M","L","S","X"},
{"e","E","o","N","Z"},
{"o","G","F","r","Y"},
{"D","H","I","J","w"}};
//print output
System.out.println(findCombinations(charArray));
}
private static List<String> findCombinations(String[][] charArray) {
List<String> prev = null;
for (int i = 0; i < charArray.length; i++) {
List<String> curr = new ArrayList<String>();
for (int j = 0; j < charArray[i].length; j++) {
if (i + 1 < charArray.length) {
for (int l = 0; l < charArray[i+1].length; l++) {
String s = charArray[i][j] + charArray[i + 1][l];
curr.add(s);
}
}
}
if (prev != null && !curr.isEmpty()) {
prev = join(prev, curr);
}
if (prev == null)
prev = curr;
}
return prev;
}
public static List<String> join(List<String> p, List<String> q) {
List<String> join = new ArrayList<String>();
for (String st1 : p) {
for (String st2 : q) {
if (st1.substring(st1.length() - 1).equals(st2.substring(0, 1))) {
String s = st1 + st2;
s = s.replaceFirst(st1.substring(st1.length() - 1), "");
join.add(s);
}
}
}
return join;
}
}
我已經檢查過並正確生成了組合。 您可以運行並查看輸出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.