zoukankan      html  css  js  c++  java
  • Leetcode 17.——Letter Combinations of a Phone Number

      

      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.

      

      Input:Digit string "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.

    分析:首先这题我没写出来,感觉脑袋有点乱,思路上肯定是没错的,从头开始循环,然后加一个,再循环,再加再循环。这样的话可以用递归,但是总是想不出怎么递归,就直接看了别人的解答,很巧妙的一个思路。我想的是从第一个数字开始循环,然后加上去,存到list,但是这样就会出现一个问题,那就是如果直接对list里面的字符串操作的话后面又会加上新的,这些新的不好加。而别人的思路就是直接把list里面的拿出来,一个个循环。这里用到了list的peek和remove的区别,peek,取链表第一个元素,但是不删除,remove,取链表第一个元素,但是会删除。remove的是从头remove,而add是从尾add,这样的话新的字符串就都在list后面了,所以可以以list头的字符串长度来作为是否完成一次添加的标准。

    public static  List<String> letterCombinations(String digits) {
            LinkedList<String> ans = new LinkedList<String>();
            if(digits.isEmpty()) return ans;
            String[] mapping = new String[] {"0", "1", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
            //防止第一个取length空指针
            ans.add("");
            
            for(int i=0;i<digits.length();i++) {
                int x=digits.charAt(i)-48;
                //当头元素长度也满足时表示整个表都满足,因为remove从头,add从尾巴。
                while(ans.peek().length()==i) {
                    String t=ans.remove();
                    ans.remove(t);
                    for(char s:mapping[x].toCharArray()) {
                        ans.add(t+s);
                    }
                }
            }
            return ans;
        }
  • 相关阅读:
    时间相关
    mongodb数据库怎么迁移
    删除项目中所有的__pycache__ 文件
    获取请求参数
    Linux VIM python 自动补全插件:pydiction
    Linux的环境变量.bash_profile .bashrc profile文件
    Linux下查看CPU型号,内存大小,硬盘空间的命令(详解)
    python3的一些文件操作的脚手架
    Python time strptime()方法 时间操作
    我看《架构漫谈》——1
  • 原文地址:https://www.cnblogs.com/GoForMyDream/p/8574753.html
Copyright © 2011-2022 走看看