Подсчитайте количество буквенных комбинаций на основе нажатий «n» (клавиатура телефона) - PullRequest
0 голосов
/ 22 апреля 2020

Итак, проблема, с которой я сталкиваюсь, заключается в создании всех доступных буквенных комбинаций, моя проблема - клавиатура телефона. По сути, если мое «n» равно 1, я могу вывести только «a, d, g, j, m, p, t, w», число которых равно 8, и если мое «n» равно 2, я могу вывести «a, b». , д, е ... аа, дд ... "и так далее. Так что, где я застрял, сейчас пытается придумать алгоритм, который бы использовал либо рекурсивное, либо динамическое c программирование. Поэтому мне нужна помощь, как я мог бы go просмотреть свой список и проверить, основываясь ли на оставленных мной нажатиях, как я мог бы добавить еще одну букву к комбинациям, которые уже есть в моем списке? (Вот немного кода, который у меня есть)

    using System;
    using System.Collections.Generic;

    class Press
    {
    static List<String> letterCombinationsUtil(int[] number,
                                        int n, String[] table)
    {


    int cnt = n;
    List<String> list = new List<String>();
    int count = 0;

    while (count < 8)
    {
        int b = 0;
        int k = cnt;
        int c = 0;
        String val = table[number[count]];
        for (int i = 0; i < val.Length; i++)
        {
            if (b < k)
            {
                list.Add(val[i].ToString());
            }
            b++;
            if (b == k)
                break;
        }
        count++;
    }
    //count = 0;
    //while (count < 8)
    //{
    //  int b = 0;
    //  int k = cnt;
    //  int c = 0;
    //  String val = table[number[count]];
    //  for (int i = 0; i < list.Count; i++)
    //  {
    //      for(int j = 0; j< val.Length; j++)
    //      {
    //          if (c == i)
    //              list.Add(list[i]+val[i].ToString());
    //          c++;
    //          if (c == k)
    //              break;
    //      }
    //  }
    //  count++;
    //}

    return list;
}


static int letterCombinations(int[] number, int n)
{
    String[] table = { "", "", "abc", "def", "ghi", "jkl",
                    "mno", "pqrs", "tuv", "wxyz" };

    List<String> list =
        letterCombinationsUtil(number, n, table);


    for (int i = 0; i < list.Count; i++)
    {
    Console.Write(list[i] + " ");
    }
    return list.Count;
}
public static void Main(String[] args)
{
    int[] number = { 2, 3 ,4,5,6,7,8,9};
    int n = 1;
    Console.WriteLine(letterCombinations(number,1));
}
}
...