需求如下: 定义方法public string[] Method(string letter,int length) 参数:letter为传入字母,length为返回字母组合最大限制长度; 调用方法举例: Method(a,4)
方法说明:为该方法传入字母a,返回以a开头的4位以内的所有字母组合,返回如:a,aa,ab,ac...aaa,aab,aac,aad...aaaa,aaab,aaac,aaad.... 调用方法举例: Method(b,4)
方法说明:为该方法传入字母b,返回以b开头的4位以内的所有字母组合,返回如:b,bb,bc,be...bbb,bbc,bbd,bbf...bbbb,bbbc,bbbd,bbbf.... 谢谢
方法说明:为该方法传入字母a,返回以a开头的4位以内的所有字母组合,返回如:a,aa,ab,ac...aaa,aab,aac,aad...aaaa,aaab,aaac,aaad.... 调用方法举例: Method(b,4)
方法说明:为该方法传入字母b,返回以b开头的4位以内的所有字母组合,返回如:b,bb,bc,be...bbb,bbc,bbd,bbf...bbbb,bbbc,bbbd,bbbf.... 谢谢
[Test]
public void TestOutput()
{
List<string> result = GetStringList('a', 4);
foreach (string message in result)
{
Console.WriteLine(message);
}
}private List<string> GetStringList(char beginChar, int length)
{
List<string> result = new List<string>();
List<string> currentResult = new List<string>();
if(length<=0)
return result;
currentResult.Add(beginChar.ToString());
if(length == 1)
{
return currentResult;
}
for(int i = 2; i < length; i++)
{
result.AddRange(currentResult);
currentResult = GetNextList(currentResult);
}
result.AddRange(currentResult);
return result;
}static char[] charLib = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };private List<string> GetNextList(List<string> prevList)
{
List<string> result = new List<string>(); foreach (string message in prevList)
{
for(int i = 0; i < charLib.Length; i++)
{
result.Add(message + charLib[i]);
}
}
return result;
}
static public string[] Method(string letter, int length)
{
Debug.Assert(letter.Length == 1 && char.IsLetter(letter[0]));
Debug.Assert(length >= 0);
List<string> list = new List<string>();
list.Add(letter);
LetterAppend(list, letter, length);
return list.ToArray();
}
static private void LetterAppend(List<string> answer, string prefix, int fixLength)
{
if (prefix.Length < fixLength)
{
List<string> temp = AppendChar(prefix);
answer.AddRange(temp);
foreach (string str in temp)
{
LetterAppend(answer, str, fixLength);
}
}
}
static private List<string> AppendChar(string prefix)
{
List<string> list = new List<string>();
for (char c = 'a'; c <= 'z'; c++)
{
list.Add(prefix + c);
}
return list;
}
/// <summary>
/// 指定开头字母和字符串的最大长度,构造以该字母开头的26个字母所有字符串组合
/// </summary>
/// <param name="c">指定的开头的字母</param>
/// <param name="len">得到所有字符串的最大长度</param>
/// <param name="lenPlus">当长度为len-1时的字符串数组长度</param>
/// <returns></returns>
private string[] ConstructString(char c, int len, out int lenPlus)
{
if (len <= 0)
{
lenPlus = 0;
return new string[0];
}
if (len == 1)
{
string[] s = new string[1];
s[0] = new string(c, 1);
lenPlus = 0;
return s;
}
else
{
string[] s = ConstructString(c, len-1, out lenPlus);
ArrayList list = new ArrayList();
foreach(string temp in s)
{
list.Add(temp);
}
for(int i=lenPlus; i<s.Length; i++)
{
for(char ch='a'; ch<='z'; ch++)
{
list.Add(s[i] + ch);
}
}
lenPlus = s.Length;
s = new string[list.Count];
list.CopyTo(s, 0);
return s;
}
}