[LeetCode 17] Letter Combinations of A Phone Number (medium)

Solution

其实就是笛卡尔积

image.png
class Solution {
    public List<String> letterCombinations(String digits) {
        List<String> result = new ArrayList<> ();
        if (digits == null || digits.length () == 0) {
            return result;
        }
        
        Map<String, String> phoneDigits = new HashMap<> ();
        phoneDigits.put ("0", "");
        phoneDigits.put ("1", "");
        phoneDigits.put ("2", "abc");
        phoneDigits.put ("3", "def");
        phoneDigits.put ("4", "ghi");
        phoneDigits.put ("5", "jkl");
        phoneDigits.put ("6", "mno");
        phoneDigits.put ("7", "pqrs");
        phoneDigits.put ("8", "tuv");
        phoneDigits.put ("9", "wxyz");
        
        letterCombinationsHelper (digits, phoneDigits, 0, "", result); // currentIndex, combinationEntry
        
        return result;
    }
    
    private void letterCombinationsHelper (String digits,
                                           Map<String, String> phoneDigits,
                                           int currentIndex,
                                           String combinationEntry,
                                           List<String> result) {
        if (currentIndex == digits.length ()) {
            result.add (combinationEntry);
            return;
        }
        
        String currentLetters = phoneDigits.get (digits.substring (currentIndex, currentIndex + 1));
        
        for (int i = 0; i < currentLetters.length (); i ++) {
            combinationEntry = combinationEntry + currentLetters.substring (i, i + 1);
            letterCombinationsHelper (digits, phoneDigits, currentIndex + 1, combinationEntry, result);
            combinationEntry = combinationEntry.substring (0, combinationEntry.length () - 1);
        }
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容