LeetCode -- 17. 电话号码的字母组合

95 阅读1分钟

在做这个题的时候遇到了一个问题,当变量设为静态之后,在LeetCode提交的时候需要调用clear()函数清空值。这也涉及到静态变量是在类加载的时候初始化,是所有对象共有的

class Solution {
    static HashMap<String,String> map = new HashMap<String,String>()
    {
        {
            put("2", "abc");
            put("3", "def");
            put("4", "ghi");
            put("5", "jkl");
            put("6", "mno");
            put("7", "pqrs");
            put("8", "tuv");
            put("9", "wxyz");
        }
    };

    static List<String> ans = new ArrayList<String>();

    static void dfs(String digits, int pos, String path)
    {
        if(pos == digits.length())
        {
            ans.add(path);
            return ;
        }
        String t = map.get(digits.substring(pos, pos + 1));
        for(int i = 0; i < t.length(); i ++)
        {
            dfs(digits, pos + 1, path + t.charAt(i));
        }
    }
    public List<String> letterCombinations(String digits) {
        ans.clear(); //必须清除ans内的元素,不然会影响下次调用
        int n = digits.length();
        if(n == 0) return ans;
        dfs(digits, 0, "");
        return ans;
    }
}