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
- Leetcode011--电话号码上的单词组合
- 【LeetCode-面试算法经典-Java实现】【017-Letter Combinations of a Phone Number (电话号码上的单词组合)】
- 电话号码的字母组合
- 电话号码的字母组合
- 电话号码的字母组合
- 电话号码的字母组合
- 电话号码的字母组合
- LintCode: 电话号码的字母组合
- lintcode,电话号码的字母组合
- 电话号码对应的字符组合
- lintcode -- 电话号码的字母组合
- 电话号码的字母组合-lintcode
- LintCode 电话号码的字母组合
- lintcode---电话号码的字母组合
- 电话号码的字母组合-LintCode
- lintcode-电话号码的字母组合-425
- 关于电话号码对应单词
- Letter Combinations of a Phone Number || 电话号码对应的单词
- MySQL中select * for update锁表的范围
- 关于 _cplusplus 的一些说明
- 画线(可以是虚线)
- 程序员最爱的五款专业辅助编程工具
- Adb大全|应用管理
- Leetcode011--电话号码上的单词组合
- const与#define的区别
- Twitter-Snowflake,64位自增ID算法详解
- MySQL 分区的使用总结
- mybatis中#{}和${}的区别和问题
- hdu 5325 Crazy Bobo
- 大型网站系统与JAVA中间件实践——chapter1-4之各种类型的IO比较
- Linux常用命令其他帮助命令
- openstack 基础知识