<Medium> Letter Combinations of a Phone Number (LeetCode : C#)

이도희·2023년 3월 19일
0

알고리즘 문제 풀이

목록 보기
36/185

https://leetcode.com/problems/letter-combinations-of-a-phone-number/

📕 문제 설명

2~9의 숫자가 주어질 때 전화번호 버튼에서 해당 숫자로 만들 수 있는 가능한 문자 조합들 반환하기

  • Input
    숫자 문자열
  • Output
    숫자로 만들 수 있는 가능한 모든 문자 조합

예제

풀이

각 숫자별로 담긴 문자에 대해 재귀로 가능한 조합들 만들기

public class Solution {
    IList<string> answerList = new List<string>();
    Dictionary<char, char[]> numToLetterDict = new Dictionary<char, char[]>
    {
        { '2', new char[] { 'a', 'b', 'c' } },
        { '3', new char[] { 'd', 'e', 'f' } },
        { '4', new char[] { 'g', 'h', 'i' } },
        { '5', new char[] { 'j', 'k', 'l' } },
        { '6', new char[] { 'm', 'n', 'o' } },
        { '7', new char[] { 'p', 'q', 'r', 's' } },
        { '8', new char[] { 't', 'u', 'v' } },
        { '9', new char[] { 'w', 'x', 'y', 'z' } },
    };
    public IList<string> LetterCombinations(string digits) {

        if (String.IsNullOrEmpty(digits))
        {
            return new List<String>();
        }

        DFS(digits, 0, new StringBuilder());

        return answerList;
    }

    private void DFS(string nums, int i, StringBuilder cur)
    {
        foreach(char c in numToLetterDict[nums[i]])
        {
            cur.Append(c); 
            if (nums.Length - 1 == i) // 주어진 숫자 수 만큼 string 붙였으면 결과에 저장
            {
                answerList.Add(cur.ToString());
            }
            else
            {
                DFS(nums, i + 1, cur);
            }

            cur.Remove(cur.Length - 1, 1); // 맨뒤에 붙인거 하나 제거
        }

    }

}

결과

profile
하나씩 심어 나가는 개발 농장🥕 (블로그 이전중)

0개의 댓글