Leetcode_0017_LetterCombinationsOfAPhoneNumber 电话号码的字母组合

154 阅读1分钟
import java.util.ArrayList;
import java.util.List;

public class Leetcode_0017_LetterCombinationsOfAPhoneNumber {

    public static char[][] phone = {
            {'a', 'b', 'c'}, // 2
            {'d', 'e', 'f'}, // 3
            {'g', 'h', 'i'}, // 4
            {'j', 'k', 'l'}, // 5
            {'m', 'n', 'o'}, // 6
            {'p', 'q', 'r', 's'}, // 7
            {'t', 'u', 'v'},   // 8
            {'w', 'x', 'y', 'z'}, // 9
    };

    public static List<String> letterCombinations(String digits) {
        if (digits == null || digits.length() <= 0) {
            return new ArrayList<>();
        }
        char[] str = digits.toCharArray();
        char[] path = new char[digits.length()];
        List<String> ans = new ArrayList<>();
        process(str, path, 0, ans);
        return ans;
    }

    // str 输入字符集 "23"
    // path 做过的决定
    // index 当前来到的位置
    // ans 收集答案
    private static void process(char[] str, char[] path, int index, List<String> ans) {
        if (index == str.length) {
            ans.add(String.valueOf(path));
        } else {
            char[] canditate = phone[str[index] - '2'];
            for (int i = 0; i < canditate.length; i++) {
                // 当前位置的答案
                path[index] = canditate[i];
                process(str, path, index + 1, ans);
            }
        }
    }

    public static void main(String[] args) {
        System.out.println(letterCombinations("23"));
    }
}