可用于拨打号码的所有字符串组合
给定一个数字,打印所有可能的字符串组合,这些组合可用于在具有以下规格的电话中拨打给定号码。
在给定的电话中,我们可以拨打,
2 使用 A 或 B 或 C,
3 使用 D 或 E 或 F,
………………。
8 使用 T 或 U 或 V,
9 使用 W 或 X 或 Y 或 Z,
1 只使用 1
0 使用 0。
例如,如果 23 是给定的电话号码,则程序应打印 AD、AE、AF、BD、BE、BF、CD、CE、CF
这个想法是在哈希映射中存储数字到字符的映射。地图存储所有可用于拨号的字符。我们为当前数字放置所有可能的字符,并为剩余的数字重复出现。下面是这个想法的Java实现。
// Java program to print all possible key strings
// that can be used to dial a phone number.
import java.util.HashMap;
class ConvertToString
{
// A Recursive function to print all combinations
// that can be used to dial a given number.
// phNo ==> Given Phone Number
// i ==> Current digit of phNo to be processed
// hm ==> Stores characters that can be used to
// to dial a digit.
// str ==> Current output string
static void printStrings(String phNo, int i,
HashMap hm,
StringBuilder str)
{
// If all digits are processed, print output
// string
if (i == phNo.length())
{
System.out.print(str + " ");
return;
}
// Get current digit of phNo, and recur for all
// characters that can be used to dial it.
String s = hm.get(phNo.charAt(i));
for (int j = 0; j < s.length(); j++)
{
str.append(s.charAt(j));
printStrings(phNo, i+1, hm, str);
str.deleteCharAt(str.length()-1);
}
}
// Prints all possible combinations of strings that
// can be used to dial c[].
static void printStringForNumber(String phNo)
{
// Create a HashMap
HashMap hm =
new HashMap();
// For every digit, store characters that can
// be used to dial it.
hm.put('2', "ABC");
hm.put('3', "DEF");
hm.put('4', "GHI");
hm.put('5', "JKL");
hm.put('6', "MNO");
hm.put('7', "PQRS");
hm.put('8', "TUV");
hm.put('9', "WXYZ");
hm.put('1', "1");
hm.put('0', "0");
// Create a string to store a particular output
// string
StringBuilder str = new StringBuilder();
// Call recursive function
printStrings(phNo, 0, hm, str);
}
// Driver code to test above methods
public static void main(String args[])
{
// Prints
printStringForNumber("23");
}
}
输出 :
AD AE AF BD BE BF CD CE CF