簡體   English   中英

C#中的特定組合,無法掌握

[英]Specific Combinations in C#, unable to grasp it

最近,我一直在研究組合,我嘗試了各種第三方解決方案,並試圖自己解決這個問題。 沒有成功,我可能會補充。

我需要生成一個長度為13的字符串,並說所有可能的組合。int 0-2,IE

0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 0 0 0 0 2
0 0 0 0 0 0 0 0 0 0 0 1 0
... 
2 2 2 2 2 2 2 2 2 2 2 2 2

您可能會開始練習,我知道如果我想要一個骯臟的解決方案,我可以將其循環包裝。 任何指導或指針,不勝感激。

我很樂意為您編寫代碼,但似乎您正在尋找對問題的直覺。 因此,也許這更像是“教人釣魚”的時刻。

所以讓我問你幾個問題:

讓我們將問題推廣到長度為N的字符串。N = 1的情況是什么樣的? 它的

0
1
2

N = 2的情況是什么樣的? 它的

00
01
02
10
11
12
20
21
22

我想知道您是否可以看到,在N = 1的情況下,我們如何以非常機械的方式輕松地推導(又稱為生成)N = 2的情況。 現在,如果您看到此特定情況的模式,您能否說出一般情況的模式? 即,如果您碰巧已經掌握了長度為N的字符串的答案,而我想請您提供長度為N + 1的字符串的答案,可以嗎? 如果是這樣,則您具有遞歸算法的定義。

附言:我認為我稱這些組合而不是排列。

我不禁將其視為僅在基於N的數字系統(在您的示例中為3基系統)中加數字。

我會寫一個方法(如果框架或庫中還沒有),則可以切換基礎。 IE:

String transformNumberFrom10BaseToXBase(int number, int base)

然后只需編寫一個for循環(對不起,類似偽c的代碼:)):

for (int i = 0; i < base ^ 13; i++) {
    print transformNumberFrom10BaseToXBase(i, base)
}

好的,希望對您有所幫助或對您有所幫助:)

我已經快速編寫了返回排列列表的函數,因此,如果您沒有時間編寫自己的方法,則可以使用它。 length是排列長度,max是最大數目(在您的情況下為2)

    static List<int[]> getPermutationList(int length, int max)
    {
        List<int[]> perm_list = new List<int[]>();
        int[] perm = new int[length];
        for (int i = 0; i < length; ++i)
            perm[i] = 0;
        while(true)
        {
            for (int i = length - 1; ; --i)
            {
                if (i == -1)
                    return perm_list;
                if (perm[i] < max)
                {
                    perm[i]++;
                    for (int j = i + 1; j < length; ++j)
                        perm[j] = 0;
                    break;
                }

            }
            int[] perm_copy = new int[length];


            for (int i = 0; i < length; ++i)
            {
                perm_copy[i] = perm[i];
            }
            perm_list.Add(perm_copy);
        }
        return perm_list;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM