1. 程式人生 > 其它 >golang 實現笛卡爾積

golang 實現笛卡爾積

package main

import (
	"fmt"
)

var a = map[string][]string{
	"1" : []string{"a","b","c"},
	"2": []string{"d", "f", "g"},
	"3":[]string{"k","v","s"},
}

func main() {
	fmt.Println(Print("123"))
}

func Print(str string)(res []string){
	baseSlices := [][]string{}
	for i := 0; i< len(str); i++{
		baseSlices = append(baseSlices, a[string(str[i])])
	}
	res = baseSlices[0]

	for _,v := range baseSlices[1:]{
		res = MakeData(res, v)
	}

	return
}

func MakeData(base []string, makeData []string) (str []string) {
	for _,v := range base{
		for _,makeDataValue :=  range makeData {
			str = append(str, v+makeDataValue)
		}
	}
	return
}

 這道題思考了很久 一開始 思路就錯了 現在分享一下思路

    a         b           c

  d   f   g     d   f   g      d   f   g

 k v s k v sk v s k v s k v sk v s k v s k v sk v s

第一步 a b c 三個

第二步 ad af ag bd bf bg cd cf cg

第三步adk adv ads afk afv afs agk agv ags bdk bdv bds bfk bfv bfs bgk bgv bgs cdk cdv cds cfk cfv cfs cgk cgv cgs

其實不難理解

1.第一次先拿出第一組資料 和第二組資料組合組合成新的陣列 也就是組合成第二步

2.組合成的第二步資料 繼續和下一組資料繼續組合