尋找一個演算法.

來源:互聯網
上載者:User
現在有一個數組如下:

$a = [1,2,3,4,5,6,7,8,9]

現在要通過上面的資料元素重建長度為2,3,4...的新數組,並且統計一共組成了新數組的個數.
比如產生長度為2的數字,並且統計$b個數 例:

$b = [1,2]$b = [1,3]$b = [1,4]$b = [1,5]

現在使用的一個比較笨的方法就是使用迴圈.長度為2就使用2個迴圈,3個就用3個迴圈.這樣代碼不利於維護.如果有10個,那麼要10個迴圈.

回複內容:

現在有一個數組如下:

$a = [1,2,3,4,5,6,7,8,9]

現在要通過上面的資料元素重建長度為2,3,4...的新數組,並且統計一共組成了新數組的個數.
比如產生長度為2的數字,並且統計$b個數 例:

$b = [1,2]$b = [1,3]$b = [1,4]$b = [1,5]

現在使用的一個比較笨的方法就是使用迴圈.長度為2就使用2個迴圈,3個就用3個迴圈.這樣代碼不利於維護.如果有10個,那麼要10個迴圈.

$a = [1,2,3,4,5,6,7,8,9];// 需要分區的大小$perSize = 2;$leader = array_shift($a);$bs = array_chunk($a, $perSize - 1);$bs = array_map(function ($item) use ($leader) {    array_unshift($item, $leader);    return $item;}, $bs);// 所有的 $b, 和 $b 的個數var_dump($bs, count($bs));

http://blog.sina.cn/dpool/blog/s/blog_4dfb08c901011wut.html?vt=4

#include int array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};int array2[9];int array2len = 0;void perm(int len, int index){    int i, j;    if (array2len < len) {        for (i = index; i < 9; i++) {            array2[array2len] = array[i];            array2len++;            perm(len, i + 1);            array2len--;        }    } else {        for (j = 0; j < array2len; j++)            printf("%d", array2[j]);        printf("\n");    }}int main(int argc, char **argv){    int i;    for (i = 2; i < 10; i++) {        array2len = 0;        perm(i, 0);    }}

我的思路是用遞迴,代碼如上,C語言的。

對了,要統計的話,有兩個思路:一個是在上面的代碼中加一些邏輯,在每次需要輸出array2的時候統計;另一個是用組合數的計算公式直接計算,比如題中9個數字產生的所有組合共有502個,高中數學講過。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.