📜  可用于拨打号码的所有字符串组合

📅  最后修改于: 2022-05-13 01:57:06.889000             🧑  作者: Mango

可用于拨打号码的所有字符串组合

给定一个数字,打印所有可能的字符串组合,这些组合可用于在具有以下规格的电话中拨打给定号码。

在给定的电话中,我们可以拨打,
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