Leetcode011--电话号码上的单词组合

来源:互联网 发布:中国卡车出口数据 编辑:程序博客网 时间:2024/05/20 13:15

一、原题



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. 




二、中文



给定一个数字串,返回数字上所有字符的所有组合,数字到字符的映射如上图所示。 
注意: 尽管上面的结果以字符顺序排列的,你可以以任何顺序返回结果。 



三、举例



比如数组输入的是23,那么有ad,ae,af,bd,be,bf,cd,ce,cf 等多种组合



四、思路



本来是看大神的思路,结果是没有看懂的,这个有点复杂,结果自己按照比较笨的思路来吧,也是通过一个小递归的思想,每次将两个按键上的字母想组合



五、程序


package LeetCode;import java.util.Iterator;import java.util.LinkedList;import java.util.List;//给定一个n个元素的数组,是否存在a,b,c三个元素,使用得a+b+c=0,找出所有符合这个条件的三元组。 public class Leetcode012 {private static int f;public static void main(String args[]){List<String> list = new LinkedList<String>();list = letterCombination("234");Iterator<String> iterator = list.iterator();while(iterator.hasNext()){System.out.print(iterator.next()+ " ");f++;if(f % 5 == 0){System.out.println();}}}private static String[] map = {            "abc",            "def",            "ghi",            "jkl",            "mno",            "pqrs",            "tuv",            "wxyz",};private static char[] charArrays;//仅在第一次执行的时候初始化list3的标志位private static int flag = 0;//第一次执行的时候复制list1的数组,目的值断开list1的引用关系,要不list1.clear()会清楚list1中的内容,因为是引用private static final List<String> list3 = new LinkedList<String>();    public static List<String> letterCombination(String digits) {    //list2用来存储连接操作之后返回的数组,list1用来接收新传入的数组    List<String> list2 = new LinkedList<String>();    List<String> list1 = new LinkedList<String>();        charArrays = digits.toCharArray();    //遍历一遍,既不等于'0',也不等于'1'    for(int i = 0; i < charArrays.length; i++){     if(charArrays[i] != '0' && charArrays[i] != '1'){        //将其转换成数字    int num = charArrays[i] - '2';        char[] cies = (map[num]).toCharArray();    for(int j = 0; j < cies.length; j++){    list1.add(String.valueOf(cies[j]));        //当第一次执行的时候才将值传给list3,这样才可以保证list3中只有abc,因为是引用,要不会增加了    if(flag  == 0){    list3.add(String.valueOf(cies[j]));    }    }        flag++;    //将两个字符串进行组合    list2 = combinationString(list1, list2);    }    list1.clear();    }    return list2;    }        /**     * 将两个字符串链表进行组合     * @param list1 新的需要组合的字符串链表     * @param list2 原来的字符串链表     * @return 返回一个新的字符串链表     */    public static List<String> combinationString(List<String> list1, List<String> list2){    List<String> listTemp = new LinkedList<String>();        String[] array1 = list1.toArray(new String[list1.size()]);      String[] array2 = list2.toArray(new String[list2.size()]);          if(array2.length <= 0){    return list3;    }else{    for(int i = 0; i < array1.length; i++){    for(int j = 0; j < array2.length; j++){    listTemp.add(array1[i]+array2[j]);    }    }    }    return listTemp;    }}


-------------------------------output---------------------------------------

gda gdb gdc gea geb gec gfa gfb gfc hda hdb hdc hea heb hec hfa hfb hfc ida idb idc iea ieb iec ifa ifb ifc 



1 0
原创粉丝点击