算法题:List<List<string>>二维数组,按顺序拼接内层数组得到一个新的不重复的List<string>集合

这是我的面试题,我不知道公开出来好不好

示例:

       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θ

如果有什么其他想法或者其他写法,请给我留言,如果还能改进给我留言

你可能感兴趣的:(算法,.net,算法,list,.net,c#,java)