Telephone Words Using Recursion

Problem: Given a telephone number print or produce all the possible telephone words or combinations of letters that can represent the given telephone number. Solution: O(3 ^ n) (approximately - since there are 2 digits that have 4 letters)
    class Program
    {
        static void Main(string[] args)
        {
            int[] phoneNumber = new int[]{2,3,4};
            List telephoneWords = GetTelephoneWords(phoneNumber, 0);
        }

        //get all the combinations / telephone words for a given telephone number
        static List GetTelephoneWords(int[] numbers, int index)
        {
            List newWords = new List();
            if (index == numbers.Length - 1)
            {
                newWords.AddRange(GetLetters(numbers[index]));
            }
            else
            {
                List wordsSoFar = GetTelephoneWords(numbers, index + 1);
                string[] letters = GetLetters(numbers[index]);

                foreach (string letter in letters)
                {
                    foreach (string oldWord in wordsSoFar)
                    {
                        newWords.Add(letter + oldWord);
                    }
                }
            }
            return newWords;
        }

        //gets the letters corresponding to a telephone digit
        static string[] GetLetters(int i)
        {
            switch (i)
            {
                case 1: return new string[]{"1"};
                case 2: return new string[] { "a", "b", "c" };
                case 3: return new string[] { "d", "e", "f" };
                case 4: return new string[] { "g", "h", "i" };
                case 5: return new string[] { "j", "k", "l" };
                case 6: return new string[] { "m", "n", "o" };
                case 7: return new string[] { "p", "q", "r", "s" };
                case 8: return new string[] { "t", "u", "v" };
                case 9: return new string[] { "w", "x", "y", "z" };
                case 0: return new string[]{"0"};
                default: return new string[] { };
            }
        }
    }

No comments:

Post a Comment