> For the complete documentation index, see [llms.txt](https://jaywin.gitbook.io/leetcode/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://jaywin.gitbook.io/leetcode/solutions/0017-letter-combinations-of-a-phone-number.md).

# 0017. Letter Combinations of a Phone Number

<https://leetcode.com/problems/letter-combinations-of-a-phone-number>

## Description

Given a string containing digits from `2-9` inclusive, return all possible letter combinations that the number could represent. Return the answer in **any order**.

A mapping of digit to letters (just like on the telephone buttons) is given below. Note that 1 does not map to any letters.

![](https://upload.wikimedia.org/wikipedia/commons/thumb/7/73/Telephone-keypad2.svg/200px-Telephone-keypad2.svg.png)

**Example 1:**

```
**Input:** digits = "23"
**Output:** ["ad","ae","af","bd","be","bf","cd","ce","cf"]
```

**Example 2:**

```
**Input:** digits = ""
**Output:** []
```

**Example 3:**

```
**Input:** digits = "2"
**Output:** ["a","b","c"]
```

**Constraints:**

* `0 <= digits.length <= 4`
* `digits[i]` is a digit in the range `['2', '9']`.

## ac

```java
class Solution {
    public List<String> letterCombinations(String digits) {
        List<String> res = new ArrayList<String>();
        // edge case
        if (digits == null || digits.length() == 0) return res;

        String[] buttons = new String[]{"", "", "abc","def", "ghi", "jkl","mno", "pqrs", "tuv","wxyz"};

        Queue<String> q = new LinkedList<>();
        q.offer("");

        for (int i = 0; i < digits.length(); i++) {
            char c = digits.charAt(i);
            if (c == '0' || c == '1') continue;

            String letters = buttons[c-'0'];
            int len = q.size();
            for (int j = 0; j < len; j++) {
                String h = q.poll();
                for (char chr : letters.toCharArray()) {
                    q.offer(h+chr);
                }
            }
        }

        res.addAll(q);

        return res;
    }
}
```
