桁の文字列を考えるには、数は表すことができ、すべての可能な文字の組み合わせを返します。入力:数字列 "23"、出力:["ad"、 "ae"、 "af"、 "bd"、 "be"、 "bf"、 "cd"、 " CE」、 "CF"]
質問
私はLeetCodeから以下のソリューションコードについて混乱しています。再帰呼び出しによってresult
配列を渡すとresult
配列がletterCombinations
に変更されるのはなぜですか?これは、結果の配列が今まで再帰的にgetString
呼び出しで同じ結果配列を参照しているためですか?これまで再帰呼び出し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
はい、 'result'は、再帰的チェーンを渡されたarraylistと同じ参照です。 – jingx
"getString'呼び出しが同じ結果配列を参照していることが正しいです。"基本的には、結果配列への参照を渡しているので、再帰を通して起こる変更は実際の配列に起こります。 – StaticBeagle