[Java]LeetCode17 Letter Combinations of a Phone Number

來源:互聯網
上載者:User

標籤:leetcode

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"].
題意:一個有數字組成的字串,按照手機上數字所對應的字串,輸出所有可以出現的組合。字串中的順序由小到大
解題思路:這是動態累加的程式。如果說,"23",我先求出2的組合,然後將2的組合與3中所對應的所有字元一一組合,這顯而易見。那如果是"234"呢。那之前有已經求出了23的所有組合,接下來,只要將23組合和4中的每個字元一一組合就可以了。同理類推,遞迴原理。
public static List<String> letterCombinations(String digits) {        List<String> list=new ArrayList<String>();        List<String> res=new ArrayList<String>();        int len=digits.length();        if(len==0)return res;        char ch;        String tmp=null;        for(int i=0;i<len;i++)        {           ch=digits.charAt(i);           if(ch!=‘0‘&&ch!=‘1‘)           {            tmp=digit2String(ch);            list.add(tmp);           }        }        len=list.size();        for(int i=0;i<len;i++)        {            res=mergeListAndString(res,list.get(i));        }        return res;    }    static List<String> mergeListAndString(List<String> list,String str)    {    if(str==null)return list;        List<String> resTmp=new ArrayList<String>();        if(list.size()==0)        {            for(int i=0;i<str.length();i++)            list.add(String.valueOf(str.charAt(i)));            return list;        }else        {           for(int j=0;j<str.length();j++)           {               for(int k=0;k<list.size();k++)               {               resTmp.add(str.charAt(j)+list.get(k));               }           }           return resTmp;        }    }    static String digit2String(char ch)    {        String str=null;        switch(ch)        {            case ‘2‘:str="abc";break;            case ‘3‘:str="def";break;            case ‘4‘:str="ghi";break;            case ‘5‘:str="jkl";break;            case ‘6‘:str="mno";break;            case ‘7‘:str="pqrs";break;            case ‘8‘:str="tuv";break;            case ‘9‘:str="wxyz";break;            default: str=null;break;        }        return str;    }
這是第一版代碼,雖然通過了。但是代碼很長。接下來,看看有沒有辦法精簡一下。
 public static List<String> letterCombinations(String digits) {                String[] digits2String={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};        List<String> res=new ArrayList<String>();        int len=digits.length();        if(len==0)return res;        char ch;        String tmp=null;        for(int i=0;i<len;i++)        {           ch=digits.charAt(i);           if(ch<=‘9‘&&ch>‘1‘)           {            tmp=digits2String[ch-‘0‘];            res=mergeListAndString(res,tmp);           }        }        return res;    }    static List<String> mergeListAndString(List<String> list,String str)    {    if(str==null)return list;        List<String> resTmp=new ArrayList<String>();        if(list.size()==0)        {            for(int i=0;i<str.length();i++)            list.add(String.valueOf(str.charAt(i)));            return list;        }else        {           for(int j=0;j<list.size();j++)           {               for(int k=0;k<str.length();k++)               {               resTmp.add(list.get(j)+str.charAt(k));               }           }           return resTmp;        }    }

[Java]LeetCode17 Letter Combinations of a Phone Number

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.