https://leetcode.com/problems/letter-combinations-of-a-phone-number/
2~9의 숫자가 주어질 때 전화번호 버튼에서 해당 숫자로 만들 수 있는 가능한 문자 조합들 반환하기
각 숫자별로 담긴 문자에 대해 재귀로 가능한 조합들 만들기
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); // 맨뒤에 붙인거 하나 제거
}
}
}