这是一个穷举算法,现在用手机上网,不方便写代码,等明天上电脑给你写!
不知道你这个是否只针对数字,是否需要排序!请补充条件!
你补充的条件和你一开始问的两个算法不一样的,不知道你要那一种?
//数组列表测试
string tmpStr = "123456";
string LastStr = "";
for (int i = 2; i < tmpStr.Length ; i++)
{
LastStr+=ChangeToNewStr(tmpStr, i);
}
MessageBox.Show(tmpStr + LastStr + tmpStr);
//ChangeNewStr("1234",2)返回12 13 14 23 24 34
string ChangeToNewStr(string tmpInStr, int GetStrLong)
{
string tmpLastStr="";
for (int i = 0; i < tmpInStr.Length-GetStrLong+1 ; i++)
{
tmpLastStr += ChangeStr(tmpInStr.Substring(i, GetStrLong - 1), tmpInStr.Substring(i+GetStrLong - 1,tmpInStr.Length-i-GetStrLong+1));
}
return tmpLastStr;
}
//ChangeStr("12","345"),返回 123,124,125
string ChangeStr(string HeadStr, string TunStr)
{
string tmpAAdStr="";
for (int k = 0; k < TunStr.Length; k++)
{
tmpAAdStr += HeadStr + TunStr.Substring(k, 1);
}
return tmpAAdStr;
}
注意,这里输出地是字符串,如果你输出字符数组的话,我建议你用ArrayList来实现,因为那样可以实现不定长,等最后的时候,可以在转换成字符数组。下面是用Arraylist的参考:
private System.Collections.ArrayList myList=new System.Collections.ArrayList();
//数组列表测试
string tmpStr = "123456";
string LastStr = "";
for (int j = 0; j < tmpStr.Length; j++)
{
myList.Add(tmpStr.Substring(j,1));
}
for (int i = 2; i < tmpStr.Length; i++)
{
LastStr += ChangeToNewStr(tmpStr, i);
}
myList.Add(tmpStr);
//此时mylist里面保存的就是所有的字符串数组,可以转换
for (int i = 0; i < myList.Count; i++)
{
listBox1.Items.Add(myList[i].ToString());
}
//ChangeNewStr("1234",2)返回12 13 14 23 24 34
string ChangeToNewStr(string tmpInStr, int GetStrLong)
{
string tmpLastStr="";
for (int i = 0; i < tmpInStr.Length-GetStrLong+1 ; i++)
{
tmpLastStr += ChangeStr(tmpInStr.Substring(i, GetStrLong - 1), tmpInStr.Substring(i+GetStrLong - 1,tmpInStr.Length-i-GetStrLong+1));
}
return tmpLastStr;
}
//ChangeStr("12","345"),返回 123,124,125
string ChangeStr(string HeadStr, string TunStr)
{
string tmpAAdStr="";
for (int k = 0; k < TunStr.Length; k++)
{
myList.Add(HeadStr + TunStr.Substring(k, 1));
tmpAAdStr += HeadStr + TunStr.Substring(k, 1);
}
return tmpAAdStr;
}
这是一个穷举算法,现在用手机上网,不方便写代码,等明天上电脑给你写!
不知道你这个是否只针对数字,是否需要排序!请补充条件!
123
用递归算法