每周一道算法题006:抽签组合
发布时间:2020-12-13 22:17:03 所属栏目:PHP教程 来源:网络整理
导读:问题: 有如下3支队伍,每个队伍都有2名队员。 team1:A,B; team2:C,D; team3:E,F; 现在每个队出1个人,组成一个队去探险,请列出所有的组队方式。 思路: 这就是一个组合的问题,每个队里挑一人,那么总共应该有2 2 2=8种组合方式。 如果暴力求解,那就是三
问题:
有如下3支队伍,每个队伍都有2名队员。 现在每个队出1个人,组成一个队去探险,请列出所有的组队方式。 思路:这就是一个组合的问题,每个队里挑一人,那么总共应该有222=8种组合方式。 有如下一种思路: 循环所有的队伍
解答:php <?php function getCombinations($arrays) { $result = array(array()); foreach ($arrays as $property => $property_values) { $tmp = array(); foreach ($result as $result_item) { foreach ($property_values as $property_value) { $tmp[] = array_merge($result_item,array($property => $property_value)); } } $result = $tmp; } return $result; } $combinations = getCombinations( array( ‘item1‘ => array(‘A‘,‘B‘),‘item2‘ => array(‘C‘,‘D‘),‘item3‘ => array(‘E‘,‘F‘),) ); $rs = $combinations; print_r($rs); 输出: Array ( [0] => Array ( [item1] => A [item2] => C [item3] => E ) [1] => Array ( [item1] => A [item2] => C [item3] => F ) [2] => Array ( [item1] => A [item2] => D [item3] => E ) [3] => Array ( [item1] => A [item2] => D [item3] => F ) [4] => Array ( [item1] => B [item2] => C [item3] => E ) [5] => Array ( [item1] => B [item2] => C [item3] => F ) [6] => Array ( [item1] => B [item2] => D [item3] => E ) [7] => Array ( [item1] => B [item2] => D [item3] => F ) ) golang: package main import "fmt" func main() { // 三组数据,每组选一个进行组合,总数应是2*2*2 d := make(map[string][]string) d["item1"] = []string{"A","B"} d["item2"] = []string{"C","D"} d["item3"] = []string{"E","F"} rs := getCombinations(d) fmt.Println(rs) } // 取得组合列表 func getCombinations(data map[string][]string) [][]map[string]string { result := make([][]map[string]string,1) for property,propertyValues := range data { tmp := make([][]map[string]string,0) for _,resultItem := range result { for _,propertyValue := range propertyValues { tmp = append(tmp,append(resultItem,map[string]string{property: propertyValue})) } } result = tmp } return result } 输出:(格式略作调整) [[map[item1:A] map[item2:C] map[item3:E]] [map[item1:A] map[item2:C] map[item3:F]] [map[item1:A] map[item2:D] map[item3:E]] [map[item1:A] map[item2:D] map[item3:F]] [map[item1:B] map[item2:C] map[item3:E]] [map[item1:B] map[item2:C] map[item3:F]] [map[item1:B] map[item2:D] map[item3:E]] [map[item1:B] map[item2:D] map[item3:F]]] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |