本文實例講述了Go語言實現(xiàn)的排列組合問題。分享給大家供大家參考,具體如下:
創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),仁化企業(yè)網(wǎng)站建設(shè),仁化品牌網(wǎng)站建設(shè),網(wǎng)站定制,仁化網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,仁化網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。(一)組合問題
組合是一個基本的數(shù)學(xué)問題,本程序的目標(biāo)是輸出從n個元素中取m個的所有組合。
例如從[1,2,3]中取出2個數(shù),一共有3中組合:[1,2],[1,3],[2,3]。(組合不考慮順序,即[1,2]和[2,1]屬同一個組合)
本程序的思路(來自網(wǎng)上其他大神):
(1)創(chuàng)建有n個元素數(shù)組,數(shù)組元素的值為1表示選中,為0則沒選中。
(2)初始化,將數(shù)組前m個元素置1,表示第一個組合為前m個數(shù)。
(3)從左到右掃描數(shù)組元素值的“10”組合,找到第一個“10”組合后將其變?yōu)椤?1”組合,同時將其左邊的所有“1”全部移動到數(shù)組的最左端。
(4)當(dāng)某次循環(huán)沒有找到“10“組合時,說明得到了最后一個組合,循環(huán)結(jié)束。
例如求5中選3的組合:
1 1 1 0 0 //1,2,3
1 1 0 1 0 //1,2,4
1 0 1 1 0 //1,3,4
0 1 1 1 0 //2,3,4
1 1 0 0 1 //1,2,5
1 0 1 0 1 //1,3,5
0 1 1 0 1 //2,3,5
1 0 0 1 1 //1,4,5
0 1 0 1 1 //2,4,5
0 0 1 1 1 //3,4,5
效率情況:20個元素中取5個,共15504個結(jié)果,耗時約10ms.
代碼實現(xiàn):
復(fù)制代碼 代碼如下:
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。