需求如下: 定义方法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.... 谢谢 

解决方案 »

  1.   


    [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;
    }
      

  2.   


       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;
       }
      

  3.   


    /// <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;
    }
    }
      

  4.   

    其实是个数学题。结果是 26的(length-1)次方+1