C# 值組合算法 -开发者知识库

C# 值組合算法 -开发者知识库,第1张

我現在有一個類,有兩個屬性值:

 public class ValueInfo
    {
        public ValueInfo(string id, string value)
        {
            this.m_ID = id;
            this.m_Value = value;
        }

        private string m_ID = string.Empty;

        public string ID
        {
            get { return this.m_ID; }
            set { this.m_ID = value; }
        }

        private string m_Value = string.Empty;

        public string Value
        {
            get { return this.m_Value; }
            set { this.m_Value = value; }
        }
    }


現在該類的集合如下:

IList<ValueInfo> valueInfos = new List<ValueInfo>();

            valueInfos.Add(new ValueInfo("A", "01"));
            valueInfos.Add(new ValueInfo("A", "02"));
            valueInfos.Add(new ValueInfo("B", "03"));
            valueInfos.Add(new ValueInfo("B", "04"));
            valueInfos.Add(new ValueInfo("B", "05"));
            valueInfos.Add(new ValueInfo("C", "06"));
            valueInfos.Add(new ValueInfo("C", "07"));


我想得到如下的結果:

A:01,B:03,C:06
A:01,B:03,C:07
A:01,B:04,C:06
A:01,B:04,C:07
A:01,B:05,C:06
A:01,B:05,C:07
A:02,B:03,C:06
A:02,B:03,C:07
A:02,B:04,C:06
A:02,B:04,C:07
A:02,B:05,C:06
A:02,B:05,C:07

就是把A、B、C三個ID的值組合在一起,但是要注意的一點是此處只是舉例是ABC三個ID,實際ID的值是不固定的,有可能是A、B、C、D......
求高手賜教這個遞歸算法應該怎么樣實現?

9 个解决方案

#1


一個思路是利用余數的性質:
按 ID 分組,設第 k 組(k 從 0 開始)項數為 m[k],總共 n 組,
最終返回的組合數為所有 m[k] 的積,記為 prod,
對於 0 到 prod-1 的每個整數 i,
對於 0 到 n-1 的每個整數 j,取出第 j 組的第 i % m[j] 個項,組成一個組合。

如有必要,還可以使用 yield 語法構造一個枚舉數來實現延遲計算。

最佳答案:

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
U19学习网站 » C# 值組合算法 -开发者知识库