这是我的面试题,我不知道公开出来好不好
示例:
var listInput = new List<List<string>>();
var list1 = new List<string>();
list1.Add("A");
list1.Add("B");
list1.Add("C");
var list2 = new List<string>();
list2.Add("1");
list2.Add("2");
list2.Add("3");
var list3 = new List<string>();
list3.Add("α");
list3.Add("β");
list3.Add("θ");
listInput.Add(list1);
listInput.Add(list2);
listInput.Add(list3);
预期结果:
A1α
A1β
A1θ
A2α
A2β
A2θ
A3α
A3β
A3θ
B1α
B1β
B1θ
B2α
B2β
B2θ
B3α
B3β
B3θ
C1α
C1β
C1θ
C2α
C2β
C2θ
C3α
C3β
C3θ
在上面的方法里面,使用方法
var list3 = new List<string>();
list3.Add("α");
list3.Add("β");
list3.Add("θ");
listInput.Add(list1);
listInput.Add(list2);
listInput.Add(list3);
///这里价格访问就行
List<string> res = new List<string>() ; //这里呢我没有写返回,但是返回的集合留着了
str(res, listInput,0);
我的写法呢,是循环算法,把我新建的类多次自调用循环
//abc是存的每个循环里面的每个值,List是总数据,tier是循环的层数
static void str(List<string> abc, List<List<string>> list, int tier = 0)
{
if (list.Count != tier) //判断循环数组是第几个数组或者说第几层,不能大于当前数量
foreach (var item in list[tier]) // 循环当前第几个数组
{
if (abc.Count < list[tier].Count) //判断输出的集合是否跟一维数组内部的长度一样
{
abc.Add(item);// 数组保存的是[{A},{1},{a}]
}
else
{
abc[tier] = item;//替换掉对应层数的字符[{A},{1},{a}]替换[{B},{1},{a}]以此类推
}
str(abc, list, tier + 1); //先调用自己再循环一层,最上面有我设置的判断多少层
print(abc); //这个是输出或打印拼接都行,abc目前已经包含所需的字段只不过是集合形式
}
}
static void print(List<string> list)
{
var str = "";
foreach (var item in list) // 咱们是等于把字符存成了数组,现在循环一下
{
str+= item;
}
Console.WriteLine(str);
}
输出正确结果,
A1α
A1β
A1θ
A2α
A2β
A2θ
A3α
A3β
A3θ
B1α
B1β
B1θ
B2α
B2β
B2θ
B3α
B3β
B3θ
C1α
C1β
C1θ
C2α
C2β
C2θ
C3α
C3β
C3θ
如果有什么其他想法或者其他写法,请给我留言,如果还能改进给我留言