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

// Time Complexity - O(3^n * 4^m)
// Space Complexity - O(3^n * 4^m)

function letterCombinations(digits) {
	if (!digits) return []

	const pMap = {
			'2': ['a', 'b', 'c'],
			'3': ['d', 'e', 'f'],
			'4': ['g', 'h', 'i'],
			'5': ['j', 'k', 'l'],
			'6': ['m', 'n', 'o'],
			'7': ['p', 'q', 'r', 's'],
			'8': ['t', 'u', 'v'],
			'9': ['w', 'x', 'y', 'z'],
		},
		result = [],
		len = digits.length

	function lcHelper(slate, numI) {
		// Base Case
		if (numI === len) {
			result.push(slate)
			return
		}

		// Recursive
		for (let j = 0; j < pMap[digits[numI]].length; j++) {
			lcHelper(slate + pMap[digits[numI]][j], numI + 1)
		}
	}

	lcHelper('', 0)
	return result
}

// Tests
console.log(letterCombinations('234'))
console.log(letterCombinations('23'))