23
for for ...
2 3
a + d "ad"
+ e "ae"
+ f "af"
b + d "bd"
+ e "be"
+ f "bf"
c + d "cd"
+ e "ce"
+ f "cf"
Backtracking
sb.append(str.charAt(i));
letterCombinations(digits, index+1, , res);
sb.deleteCharAt(str.length()-1);
Input: Digit String "23"
Output: ["ad", "ae", "af", "bd", "be", "bf", "cd","ce",""cf]
2. Implementation
Q1: first digit String1 and Second digit String2
A1: nested for loop one char to one char pair O(k^n), k average letter of a number and n is the lenght of digit
"23"
3*3 = 3^2 = 9
// Recursive // Time:O(k^n) , Sapce:O(n) // List{"ad", "ae", "cf"}, size is dynamic and so it is List public List letterCombination(String digits) { String[] letters = {"abc", "def", "ghi", "mno", "pqrs", "tuv", "wxyz"}; List res = new LinkedList<>(); // validate the input if ( digits == null || digits.length() == 0) return res; StringBuilder sb = new StringBuilder(); letterCombinations(digits, 0, letters, sb, res); } private void letterCombinations(String digits, int index, String[] letters, StringBuilder sb, List res) { if (index == digit.length() ) { res.add(sb.toString()); return; } int number = digits.charAt(index) - '0'; //String str = getLetters(number); String str = null; if (digit == 0) str = " "; else str = letters[digit-2]; for (int i = 0 ; i < str.length(); i++) { sb.append(str.charAt(i)); letterCombinations(digits, index+1, , res); sb.deleteCharAt(str.length()-1); } }
private String getLetters(int number)
// Iterative
{
switch(number)
{
case 0:// zero is a SPACE
return " ";
case 2:
return "abc";
//break;
case 3:
return "def";
//break;
case 4:
return "ghi";
//break;
case 5:
return "jkl";
//break;
case 6:
return "mno";
//break;
case 7:
return "pqrs";
//break;
case 8:
return "tuv";
//break;
case 9:
return "wxyz";
//break;
default:
return "";
}
}
3. Similar Onestwo entity with single unit, how many combinations
Combination
No comments:
Post a Comment