在博客园里看到这样一道题目,就写下来,方便记忆。
题目:
五笔的编码范围是a ~ y的25个字母,从1位到4位的编码,如果我们把五笔的编码按字典序排序,形成一个数组如下:
a, aa, aaa, aaaa, aaab, aaac, … …, b, ba, baa, baaa, baab, baac … …, yyyw, yyyx, yyyy
其中a的Index为0,aa的Index为1,aaa的Index为2,以此类推。
1)编写一个函数,输入是任意一个编码,比如baca,输出这个编码对应的Index;
2)编写一个函数,输入是任意一个Index,比如12345,输出这个Index对应的编码。
实现:
private void GetStrBuffer(List<string> strLst, string strPre, int num)
{
num++;
for (char cChr = 'a'; cChr <= 'y'; cChr++)
{
Console.WriteLine(num.ToString());
string strNew = strPre + cChr;
strLst.Add(strNew);
if (num < 4)
{
GetStrBuffer(strLst, strNew, num);
}
}
}
或:
private void GetStrBuffer(List<string> strLst, string strPre)
{
for (char cChr = 'a'; cChr <= 'y'; cChr++)
{
string strNew = strPre + cChr;
strLst.Add(strNew);
if (strNew.Length < 4)
{
GetStrBuffer1(strLst, strNew);
}
}
}
调用以上函数:
List<string> strLst = new List<string>();
GetStrBuffer(strLst, string.Empty);
//1)
Console.WriteLine(strs.BinarySearch("baca"));
//2)
Console.WriteLine(strs[12345]);