我試圖找出以下使用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