funcCombinations2(set[]string,nint)(subsets[][]string){length:=uint(len(set))ifn>len(set){n=len(set)}// Go through all possible combinations of objects// from 1 (only first object in subset) to 2^length (all objects in subset)forsubsetBits:=1;subsetBits<(1<<length);subsetBits++{ifn>0&&bits.OnesCount(uint(subsetBits))!=n{continue}varsubset[]stringforobject:=uint(0);object<length;object++{// checks if object is contained in subset// by checking if bit 'object' is set in subsetBitsif(subsetBits>>object)&1==1{// add object to subsetsubset=append(subset,set[object])}}// add subset to subsetssubsets=append(subsets,subset)}returnsubsets}
顺带测试全组合
Go: 全组合
12345678910111213141516171819202122
funcAll(set[]string)(subsets[][]string){length:=uint(len(set))// Go through all possible combinations of objects// from 1 (only first object in subset) to 2^length (all objects in subset)forsubsetBits:=1;subsetBits<(1<<length);subsetBits++{varsubset[]stringforobject:=uint(0);object<length;object++{// checks if object is contained in subset// by checking if bit 'object' is set in subsetBitsif(subsetBits>>object)&1==1{// add object to subsetsubset=append(subset,set[object])}}// add subset to subsetssubsets=append(subsets,subset)}returnsubsets}