https://leetcode.com/problems/letter-combinations-of-a-phone-number/description/
Этот код генерирует все возможные строки, когда каждая цифра от 2 до 9 (включительно) отображается в строку английского алфавита.
Вопрос в том, чтобы воссоздать словарь T9 для мобильного телефона. Это означает, что если пользователь наберет 23, то должны быть возвращены все возможные комбинации строк «abc» и «def».
https://ideone.com/4FodC8
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
System.out.println(letterCombinations("23"));
}
private static final String[] KEYS = { "", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz" };
public static List<String> letterCombinations(String digits) {
List<String> ret = new LinkedList<String>(); //this is the local variable.
combination("", digits, 0, ret); //being sent to a method. But that method doesn't have any return type.
return ret; //so, how is this ret being populated????
}
private static void combination(String prefix, String digits, int offset, List<String> ret) {
if (offset >= digits.length()) {
ret.add(prefix);
return;
}
String letters = KEYS[(digits.charAt(offset) - '0')];
for (int i = 0; i < letters.length(); i++) {
combination(prefix + letters.charAt(i), digits, offset + 1, ret);
}
}
}
Как устанавливается ret
, объявленный и созданный в методе letterCombination()
, когда метод combination( )
не имеет возвращаемого типа.