leetcode: 17. Letter Combinations of a Phone Number

Difficulty

Medium

Description

Given a string containing digits from 2-9 inclusive, return all possible letter combinations that the number could represent.

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



Example:

Input: "23"
Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
Note:

Although the above answer is in lexicographical order, your answer could be in any order you want.

Solution

class Solution {
    public List<String> letterCombinations(String digits) {
        String[] s = new String[] {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
        List<String> list = new ArrayList<>();
        if (digits.length() == 0) return list;
        dfs(list, s, "", digits, digits.length());
        return list;
    }
    
    public void dfs(List<String> list, String[] s, String t, String d, int len) {
        if (t.length() == len) {
            list.add(t);
            return;
        }
        
        String str = s[d.charAt(0) - '0'];
        for (int i = 0; i < str.length(); i++) {
            dfs(list, s, t + str.charAt(i), d.substring(1), len);
        }
        
    }
}
class Solution {
	
	List<String> ret = new ArrayList<String>();

    public List<String> letterCombinations(String digits) {
        int i = 0;
        while (i + 1 <= digits.length()) {
			int len = ret.size();
            switch (digits.charAt(i)) {
                case '2':
                    add('a', len, 0);
                    add('b', len, 0);
                    add('c', len, 1);
                    break;
                case '3':
                    add('d', len, 0);
                    add('e', len, 0);
                    add('f', len, 1);
                    break;
                case '4':
                    add('g', len, 0);
                    add('h', len, 0);
                    add('i', len, 1);
                    break;
                case '5':
                    add('j', len, 0);
                    add('k', len, 0);
                    add('l', len, 1);
                    break;
                case '6':
                    add('m', len, 0);
                    add('n', len, 0);
                    add('o', len, 1);
                    break;
                case '7':
                    add('p', len, 0);
                    add('q', len, 0);
                    add('r', len, 0);
                    add('s', len, 1);
                    break;
                case '8':
                    add('t', len, 0);
                    add('u', len, 0);
                    add('v', len, 1);
                    break;
                case '9':
                    add('w', len, 0);
                    add('x', len, 0);
                    add('y', len, 0);
                    add('z', len, 1);
                    break;
            }
	        i++;
        }
		return ret;
    }

	public void add(char digit, int size, int clean) {
		int i = 0;
		if (size == 0)
		{
			ret.add(digit + "");
		} else {
			for (i = 0; i < size; i++)
			{
				ret.add(ret.get(i) + digit);
			}
			if (clean == 1)
		    {
				for (i = 0; i < size; i++)
				{
					ret.remove(0);
				}
		    }
		}
	}
}

猜你喜欢

转载自blog.csdn.net/baidu_25104885/article/details/86596695
今日推荐