17. Letter Combinations of a Phone Number

recursive

class Solution {
    public List<String> letterCombinations(String digits) {
        String[] hash = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
        List<String> ans = new ArrayList<>();
        if (digits == null || digits.length() == 0) return ans;

        dfs(digits, 0, hash, "", ans);

        return ans;
    }

    private void dfs(String digits, int index, String[] hash, String path, List<String> ans){
        if (index == digits.length()){
            ans.add(path);
            return;
        }

        char cur = digits.charAt(index);
        int num = cur - '0';
        for (char c : hash[num].toCharArray()){
            dfs(digits, index + 1, hash, path + c, ans);
        }
    }
}

iterative

class Solution {
    public List<String> letterCombinations(String digits) {
        LinkedList<String> ans = new LinkedList<>();
        if (digits == null || digits.length() == 0) return ans;
        String[] hash = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
        ans.add("");

        for (int i = 0; i < digits.length(); i++){
            char digit = digits.charAt(i);
            int index = digit - '0';

            while (ans.peek().length() == i){
                String cur = ans.remove();
                for (char c : hash[index].toCharArray()){
                    ans.add(cur + c);
                }    
            }
        }

        return ans;
    }
}

results for ""

    No results matching ""