LeetCode17
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”].
思路:
想要找出所有可能性的字母组合,例如要找出三个数字的所有字母组合,
那么,需要找出三个数字中第一个数字对应的字母,
依次遍历这些字母与剩下的两位数字组成的字母组合进行组合,依次类推。
以下使用python代码和Java代码实现
python
arr = [" ","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"]
class Solution(object):
result = []
def findCombination(self, digits, index, s):
# 当输入为空时,返回空
if not digits:
return self.result
# 递归条件
if index == len(digits):
self.result.append(s)
print self.result
return self.result
# 获取从第一位开始输入的数字,若输入的digits为“321”,那么当index为0是,c=3
c = digits[index]
# 将c转换成ASCII值
c = ord(c)
# 获取c对应的键盘数字的字母,例如c=3,那么对应的键盘字母letters为def
letters = arr[c - ord('0')]
#遍历letters
for i in range(len(letters)):
print s+letters[i]
# 递归调用自己,除去index前面的数字所对应的字母,遍历后衔接index后面已经排列好的字母进行组合
self.findCombination(digits, index + 1, s + letters[i])
def letterCombinations(self, digits):
# 传入用户输入digits,index初始化为0,也就是从digits第一位开始,初始化字符串为空
self.findCombination(digits,0,"")
return self.result
if __name__ == '__main__':
test = Solution()
result = test.letterCombinations("234")
print "result:"+str(result)
Java
import java.util.*;
public class Letter_Combinationsof_a_Phone_Number {
// 定义全局静态常量用于存放电话数字键对应的字母
public static final String[] arr ={""," ","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
// 定义存放结果的数组
ArrayList<String> list = new ArrayList<>();
public List<String> letterCombinations(String digits) {
if (digits.trim().length() == 0){
return list;
}
return findCombination(digits,0,"");
}
// 定义私有函数
// 参数意义:digits为用户输入的数字字符串,index为字符串的索引,list为返回的部分数字字符的结果
private List<String> findCombination(String digits,int index,String s){
if (index == digits.length()){
list.add(s);
return list;
}
// 找出数字字符对应的ASCII值
char c = digits.charAt(index);
// 找到该数字对应的键盘上的字母
String letters = arr[c-'0'];
System.out.println(letters);
// 遍历letters
for (int i = 0;i<letters.length();i++){
// 与剩下的index-1位进行组合
findCombination(digits,index + 1,s+letters.charAt(i));
}
return list;
}
public static void main(String[] args) {
List list = new Letter_Combinationsof_a_Phone_Number().letterCombinations("23");
System.out.println("result:"+list);
}
}