c# 列举出给定字符的所有组合可能
string[]str={"a","b","c","d"}把字符串数组str里面的元素进行组合(例如ab,abc,abcd,bac等等)列举出所有组合,并把新组合的字符串...
string[] str={"a","b","c","d"}
把字符串数组 str里面的元素进行组合 (例如ab, abc,abcd,bac 等等)列举出所有组合,并把新组合的字符串添加到string[] tmp={} 数组中,求教怎么写?注:str里面的元素是不确定的,可能有很多个(a,b,c...z) 展开
把字符串数组 str里面的元素进行组合 (例如ab, abc,abcd,bac 等等)列举出所有组合,并把新组合的字符串添加到string[] tmp={} 数组中,求教怎么写?注:str里面的元素是不确定的,可能有很多个(a,b,c...z) 展开
3个回答
展开全部
楼上的速度很快,递归用的也相当漂亮,瑕疵就是没有考虑到乱序的情况。
我这一串代码你可以试一下
static void Main(string[] args)
{
Console.WriteLine("************************");
{
string[] strArr = { "a", "b", "c", "d" };
OperateStr(strArr);
}
Console.WriteLine("");
Console.WriteLine("************************");
Console.ReadKey();
}
/// <summary>
///
/// </summary>
/// <param name="arr"></param>
static void OperateStr(string[] arr)
{
List<string> strList = new List<string>();//定义一个字符串列表,存储组合的字符
//组合成abcd需要循环3次即length-1次
for (int i = 0; i < arr.Length - 1; i++)
{
if (strList != null && strList.Count > 0)
{
strList.AddRange(BindStrArr(strList.ToArray(), arr));//用拼接出的新数组和原数组继续拼接出多一个字符长度的字符串数组,继续存储在strList中
}
else
{
strList.AddRange(BindStrArr(arr, arr));//第一次用原数组和原数组拼接出两个字符长度的新数组,并存储在strList中
}
}
foreach (var str in strList)
{
Console.Write(string.Format("{0},", str));
}
}
/// <summary>
/// 两个数组里的元素进行组合,含有相同元素的跳过
/// </summary>
/// <param name="arr1"></param>
/// <param name="arr2"></param>
/// <returns></returns>
static string[] BindStrArr(string[] arr1, string[] arr2)
{
List<string> strList = new List<string>();
string[] arr3;
foreach (string tmp1 in arr1)
{
foreach (string tmp2 in arr2)
{
if (tmp1.Contains(tmp2))
continue;
strList.Add(string.Format("{0}{1}", tmp1, tmp2));
}
}
arr3 = strList.ToArray();
return arr3;
}
展开全部
static void Main(string[] args)
{
List<string> arr = new List<string>() { "A", "B", "C" ,"D","E"};
List<string> ret = new List<string>();
Fun(arr, ret);
Console.Write(string.Join("\n", ret.ToArray()));
Console.ReadLine();
}
static void Fun(List<string> arr, List<string> ret, int len = 2)
{
int[] index = new int[len];
for (int i = 0; i < index.Length; i++)
{
index[i] = i;
}
bool ok;
do
{
while (index[len - 1] < arr.Count)
{
string s = "";
for (int i = 0; i < len; i++)
s += arr[index[i]];
ret.Add(s);
index[len - 1]++;
}
ok = true;
for (int i = len - 2; i >= 0; i--)
{
if (index[i] < arr.Count - (len - i))
{
index[i]++;
ok = false;
for (int j = i + 1; j < len; j++)
{
index[j] = index[j - 1] + 1;
}
break;
}
}
} while (ok == false);
if (len < arr.Count)
Fun(arr, ret, len + 1);
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |