我试图找出以下使用C#: 具有a = 1,b = 2,c = 3等到z的算法。当给定一串数字时,我需要计算字母数组合。因为'1'+'2'+'3'= abc,'1'+ 23'= aw,'12'+'3'='123',所以输出将为。 lc查找字母组合的数量,使每个字母等于一个数字
我知道应该有一个递归函数来检查每个数字。在函数内部应该有一个循环。如果该数字大于26,则跳过该组合。
这是我一直在努力迄今:
static void Main(string[] args)
{
int no_combination = getCombinations("123");
}
public int getCombinations(string str)
{
char[] numbers = str.ToCharArray();
List<string> combinatins = new List<string>();
int no_combinations = getPossibilities(numbers, 0, out combinatins);
return no_combinations;
}
public int getPossibilities(char[] numbers, int index, out List<string> combinations)
{
combinations = new List<string>();
int possibilities = 0;
string combination = "";
for (int i = index; i < numbers.Length; i++)
{
combination += numbers[i] + " ";
}
combinations.Add(combination);
possibilities = combinations.Count;
if (index>=numbers.Length)
{
return possibilities;
}
getPossibilities(numbers, ++index, out combinations);
return possibilities;
}
我知道有逻辑错误。每个呼叫中组合列表都会重置。而组合创建的方式缺少一个我无法获得的调整。我不期望写出整个代码。有用的提示将不胜感激。
相关:http://stackoverflow.com/questions/3093622/generating-all-possible-combinations –
不分析你的代码。这里是一个草图:鉴于你的递归函数F和字符串S.˚F自称两次:(1):它占据一个号码(通过缩短第一要素S)和转换为数字;然后用缩短的S和已经构造的字符串调用它自己。 (2):它消耗两个数字(前两个元素缩短S)并转换为数字;如果不可能的话:返回空!如果可能的话:用缩短的S和已经构建的字符串调用自己。所有这些函数都可以返回最终的字符串;收集他们全部在顶部F&建立一套和数量或做任何你想要的。 – sascha
我记得在某处看到并解决了这个问题,但不记得在哪里。你能发布一个链接,以便我们可以测试我们的解决方案吗? – EvilTak