[Leetcode] Letter Combinations of a Phone Number
2015-08-14 11:04
381 查看
每个数字对应多个字符,给定一个数字串,给出所有与这个数字串对应的字符串。
一、使用递归的方式最容易想到了
二、实际上这里的重点不是递归,是如何将这个算法改为非递归的方式。
实际上这里可以使用一个中数字进位的方式来对所有的编码方式进行遍历。
假设所给出的数字串的长度为N,我们初始化一个计数数组count[0,N-1],长度为N,这个计数数组的每一位的最大数字可能是不一样的,记为MAX[0,N-1]
initialize:
count[0,N-1]=0;
start:
我们对count进行加一操作,这里可能会导致进位,进位操作要根据MAX[0,N-1]来进行。
end:
如果所有位都达到了最大的值,那么算法停止。
举个栗子:
2:a\b\c
3:d\e
6:m\n\o
MAX为:3,2,3
count数组的变化为
0 0 0
0 0 1
0 0 2
0 1 0
0 1 1
0 1 2
1 0 0
1 0 1
1 0 2
1 1 0
1 1 1
1 1 2
2 0 0
2 0 1
2 0 2
2 1 0
2 1 1
2 1 2
思路已经很清新了!
一、使用递归的方式最容易想到了
import java.util.*; public class Solution { void backtree(String digits,int index,String numgroup[],List<String> strs,String assembleone){ if(index==digits.length()) { strs.add(assembleone); return; } String groupone=numgroup[digits.charAt(index)-'0']; for(int i=0;i<groupone.length();i++){ backtree(digits,index+1,numgroup,strs,assembleone+groupone.substring(i,i+1)); } } public List<String> letterCombinations(String digits) { String numgroup [] ={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"}; List<String> res=new LinkedList<String>(); if(digits==null||digits.compareTo("")==0) return res; backtree(digits,0,numgroup,res,""); return res; } }
二、实际上这里的重点不是递归,是如何将这个算法改为非递归的方式。
实际上这里可以使用一个中数字进位的方式来对所有的编码方式进行遍历。
假设所给出的数字串的长度为N,我们初始化一个计数数组count[0,N-1],长度为N,这个计数数组的每一位的最大数字可能是不一样的,记为MAX[0,N-1]
initialize:
count[0,N-1]=0;
start:
我们对count进行加一操作,这里可能会导致进位,进位操作要根据MAX[0,N-1]来进行。
end:
如果所有位都达到了最大的值,那么算法停止。
举个栗子:
2:a\b\c
3:d\e
6:m\n\o
MAX为:3,2,3
count数组的变化为
0 0 0
0 0 1
0 0 2
0 1 0
0 1 1
0 1 2
1 0 0
1 0 1
1 0 2
1 1 0
1 1 1
1 1 2
2 0 0
2 0 1
2 0 2
2 1 0
2 1 1
2 1 2
思路已经很清新了!
相关文章推荐
- Number Sequence - HDU 1711(KMP模板题)
- python+selenium测试用例参考
- easyui-datebox不能选择未来时间的解决方案
- 虚函数——C++PrimeCr第五版读书笔记
- Windows系统相关资料整理
- POJ2342 Anniversary party 树形dp入门题
- 生即为死,死亦为生
- 预格式文本的作用
- 手动解析CrashLog之——原理篇
- android:clipToPadding和android:clipChildren的解析
- eclipse下如何直接做JSP代码设计
- 在SAP中进行黏贴时必须要把之前的数据删掉后才能黏贴,不能直接使用黏贴来覆盖之前的数据,这个怎麼解?
- 有关自动化测试工具monkey&monkeyrunner的使用经验小结
- VB.NET读写MongoDB
- --最小生成树的处理(始终抓取最小边的克鲁斯卡尔算法)
- 如何将PDF转成HTML格式
- jQuery入门基础知识学习指南
- combobox动态添加必填属性验证
- android 拖拽与缩放
- Java 多线程总结