电话号码的字母组合
解题思路:
回溯。通过递归找到所有可能的组合。
代码:
public class solution
{
public IList<string> LetterCombinations(string digits)
{
IList<string> results = new List<string>();
if (string.IsNullOrEmpty(digits))
return results;//首先判断是否非空或空格。
char[] result = new char[digits.Length];//记录每一种组合。
path(digits,result,0,results);//调用递归回溯找到所有组合。
return results;
}
public void path(string digitis,char[] result,int temp,IList<string> results)
{
if (temp == digitis.Length)//temp指针,指向当前组合已经有多少个数。
{
results.Add(new string(result));
return;
}
int p = 0;//指针,指向应该加这个数字的第几个字母。
string lgx = getstring(digitis[temp]);
while(p<lgx.Length)
{
result[temp] = lgx[p];//添加相应位置的字母。
path(digitis, result, temp + 1, results);//找下一个位置的字母。
p++;
}
}//递归回溯。
public string getstring(char i)
{
switch(i)
{
case '2': return "abc";
case '3': return "def";
case '4': return "ghi";
case '5': return "jkl";
case '6': return "mno";
case '7': return "pqrs";
case '8': return "tuv";
case '9': return "wxyz";
default:return null;
}
}//根据数字字符得到有哪些字母。
}