所以這個問題已經嘲弄了我好幾天了。任何幫助是極大的贊賞!我制作了一個 LinkedHashMap,它存盤了字串每個部分的可能組合,我試圖在字串的 ArrayList 中獲取所有排列,同時保持字串順序。例如,如果地圖是:
a=ab, b=c
組合將是:
ab
ac
abb
abc
我曾嘗試簡單地回圈每個鍵和值串列,堆演算法無法保持元素的順序,也嘗試使用遞回,但我不確定如何。如果有人能指出我正確的方向或暗示我,那就太好了。謝謝
我正在嘗試做的另一個地圖示例。
如果地圖是:
A=a, B=b
輸出是:
AB (key1, key2)
Ab (key1, value2)
aB (value1, key2)
ab (value1, value2)
我基本上希望整個地圖的每個組合按順序排列,同時在地圖的鍵和值之間交替。
uj5u.com熱心網友回復:
嘗試這個。
static List<String> possiblePermutations(Map<String, String> map) {
int size = map.size();
List<Entry<String, String>> list = new ArrayList<>(map.entrySet());
List<String> result = new ArrayList<>();
new Object() {
void perm(int i, String s) {
if (i >= size) {
result.add(s);
return;
}
Entry<String, String> entry = list.get(i);
perm(i 1, s entry.getKey());
perm(i 1, s entry.getValue());
}
}.perm(0, "");
return result;
}
public static void main(String[] args) {
Map<String, String> map = new LinkedHashMap<>();
map.put("a", "ab");
map.put("b", "c");
map.put("x", "y");
List<String> result = possiblePermutations(map);
System.out.println(result);
}
輸出:
[abx, aby, acx, acy, abbx, abby, abcx, abcy]
uj5u.com熱心網友回復:
這很簡單...
- 假設地圖中的條目數是
N - 此類字串的每個可能排列與
boolean長度陣列之間存在一對一映射N。如果陣列有一個truein positionK,我們從 map entry 中選擇鍵K,否則我們選擇值。 - 因此,要生成所有可能的排列,您需要生成所有可能的布爾陣列(與二進制數相同),
N然后使用每個陣列創建相應的字串。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/350400.html
