毎日1題LeetCode[15日目]

2670 ワード

毎日1題LeetCode[15日目]
Letter Combinations of a Phone Number
Description:
Given a digit string, 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.

[pic_url](https://leetcode.com/problems/letter-combinations-of-a-phone-number/?tab=Description)

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

翻訳:
        ,           。             ,      。

問題解決の考え方:
  • 自身が考えている方法は,最初から最後まで遍歴し,遍歴するたびに前の文字列種樹に現在の文字列の可能な数を加えて新しい文字列集合を構成することである.そして最初はArrayListを使いたいと思っていましたが、このような配列を毎回削除して追加するのは本当に効率が悪いと思いました.Top Solutionを見て、FIFOというデータ構造で良いのかと思いました!!本当に...愚かだ!

  • Javaコード:
    public class Solution {
        public List letterCombinations(String digits){
            if(digits.length()<=0){
                return Collections.emptyList();
            }
            LinkedList ans = new LinkedList();
            String[] mapping = new String[] {"0", "1", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
            ans.add("");
            for(int i=0;iint x=Character.getNumericValue(digits.charAt(i));
                while (ans.peek().length()==i){
                    String str=ans.poll();
                    for(char c:mapping[x].toCharArray()){
                        ans.add(str+c);
                    }
    
                }
            }
    
            return ans;
    
        }
    }

    コードの品質を高めることは:美しい構想を蓄積して、良質な細部の過程です.