Study/Algorithm

LeetCode (C/C++) 17. Letter Combinations of a Phone Number

hwooo 2024. 5. 23. 17:40

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


풀이

숫자당 할당된 문자열을 저장해둔 후, digits을 탐색하며 해당 숫자에 맞는 문자열을 찾았다.

이를 현재 만들어진 문자열에 더하면서 가능한 가짓수의 조합을 모두 만든 후, digits의 길이와 같다면 해당 조합을 저장하는 식으로 구현했다.


코드

class Solution {
public:
    vector<string> ans;
    string nums[10] = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};

    vector<string> letterCombinations(string digits) {

        int len = digits.size();
        if (len)
            makeLetterCombinations(digits, "", len);
        return ans;
    }

    // 입력된 수의 길이만큼 재귀를 돌며 문자열을 생성
    void makeLetterCombinations(string &digits, string s, int len) {
    
	// 만든 문자열의 길이가 입력받은 수와 같다면 저장 후 재귀 종료
        int sLen = s.length();
        if (sLen == len) {
            ans.push_back(s);
            return;
        }
				
	// 현재 문자열의 길이 = 넣어야 하는 digits의 인덱스
        int idx = digits[sLen] - '0';
        for (int j = 0; j < nums[idx].size(); j++) {
            makeLetterCombinations(digits, s + nums[idx][j], len);
        }
    }
    
};