給出一個數字串傳遞一個數組,返回所有可能的字母組合,該數字可能代表。 (輸出:數字字符串「23」,輸出:[「ad」,「ae」,「af」,「bd」,「be」,「bf」,「cd」,「 CE」, 「CF」]
問題
我感到困惑,從LeetCode下面的解決方案代碼。爲什麼傳遞result
數組通過遞歸調用result
數組在letterCombinations
?是否因爲結果數組在遞歸調用getString
引用了相同的結果數組?
public List<String> letterCombinations(String digits) {
HashMap<Integer, String> map = new HashMap<>();
map.put(2, "abc");
map.put(3, "def");
map.put(4, "ghi");
map.put(5, "jkl");
map.put(6, "mno");
map.put(7, "pqrs");
map.put(8, "tuv");
map.put(9, "wxyz");
map.put(0, "");
ArrayList<String> result = new ArrayList<>();
if (digits == null || digits.length() == 0) {
return result;
}
ArrayList<Character> temp = new ArrayList<>();
getString(digits, temp, result, map);
return result;
}
public void getString(String digits, ArrayList<Character> temp, ArrayList<String> result,
HashMap<Integer, String> map) {
if (digits.length() == 0) {
char[] arr = new char[temp.size()];
for (int i = 0; i < temp.size(); i++) {
arr[i] = temp.get(i);
}
result.add(String.valueOf(arr));
return;
}
Integer curr = Integer.valueOf(digits.substring(0, 1));
String letters = map.get(curr);
for (int i = 0; i < letters.length(); i++) {
temp.add(letters.charAt(i));
getString(digits.substring(1), temp, result, map);
temp.remove(temp.size() - 1);
}
}
@slim你知道我的問題的答案嗎? – Alex
是的,'結果'與遞歸鏈中傳遞的數組列表相同。 – jingx
你在「'getString'調用引用相同的結果數組」時是正確的。基本上你傳遞了一個對結果數組的引用,因此在整個遞歸過程中發生的任何變化都發生在實際的數組中。 – StaticBeagle