题目详情

Given a digit string, return all possible letter combinations that the number could represent.
mapping of digit to letters (just like on the telephone buttons) is given below.
200px-Telephone-keypad2.png

这道题要求我们给出,对于输入的按键组合,我们需要返回按键所对应的所有可能的字符串。而按键和字母的对应关系如上图。

想法

  • 这道题就是一种排列组合,对于一种按键组合我们要按照输入顺序排列组合出所有的字符串。
  • 每一次按键我们都会得到一系列字符串,如"2"得到"a","b","c"。这将成为下一次操作的前序字符串。
  • 我们将字符串存储在linkedlist里面,通过peek操作依次取出前序字符串。对于每一个不同的前序字符串,我们都要在其后面分别加上当前键所表示的不同字符,再将获得的结果字符串加入linkedlist里面。

解法

    public List<String> letterCombinations(String digits) {
        LinkedList<String> res = new LinkedList<String>(); 
        if(digits.length() == 0){
            return res;
        }
        String[] mapping = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};       
        res.add("");
        
        for(int i=0;i<digits.length();i++){
            int index = Character.getNumericValue(digits.charAt(i));
            while(res.peek().length() == i){
                String temp = res.remove();
                for(char c : mapping[index].toCharArray()){
                    res.add(temp+c);
                }
            }
            
        }      
        
        return res;
    }

soleil阿璐
350 声望45 粉丝

stay real ~