Calculating all possible sub-sequences of a given length (C#)

前端 未结 4 1420
悲&欢浪女
悲&欢浪女 2020-12-16 06:21

If I have a sequence as follows (let\'s say it\'s an IEnumerable):

[A, B, C, D, E]

Then what\'s the cleanest way to c

4条回答
  •  长情又很酷
    2020-12-16 07:07

    Something like:

    static void Main()
    {
        string[] data = { "A", "B", "C", "D", "E" };
        WalkSubSequences(data, 3);
    }
    
    public static void WalkSubSequences(IEnumerable data, int sequenceLength)
    {
        T[] selected = new T[sequenceLength];
        WalkSubSequences(data.ToArray(), selected, 0, sequenceLength);
    }
    private static void WalkSubSequences(T[] data, T[] selected,
        int startIndex, int sequenceLength)
    {
        for (int i = startIndex; i + sequenceLength <= data.Length; i++)
        {
            selected[selected.Length - sequenceLength] = data[i];
            if (sequenceLength == 1)
            {
                ShowResult(selected);
            }
            else
            {
                WalkSubSequences(data, selected, i + 1, sequenceLength - 1);
            }
        }
    }
    
    private static void ShowResult(T[] selected)
    {
        StringBuilder sb = new StringBuilder();
        sb.Append(selected[0]);
        for (int j = 1; j < selected.Length; j++)
        {
            sb.Append(';').Append(selected[j]);
        }
        Console.WriteLine(sb.ToString());
    }
    

提交回复
热议问题