Skip to content

Instantly share code, notes, and snippets.

@bamchoh
Created July 8, 2020 12:30
Show Gist options
  • Save bamchoh/ea7c8e9a27fdd9c15111ed8c8617762c to your computer and use it in GitHub Desktop.
Save bamchoh/ea7c8e9a27fdd9c15111ed8c8617762c to your computer and use it in GitHub Desktop.
全列挙(DFS版)
package main
import (
"fmt"
"strings"
)
func comb(a []string) [][]string {
b := make([][]string, 0)
var fn func([]string, []string)
fn = func(v []string, c []string) {
if len(c) == 0 {
vv := make([]string, len(v))
copy(vv, v)
b = append(b, vv)
return
}
fn(append(v), c[0:len(c)-1])
fn(append([]string{c[len(c)-1]}, v...), c[0:len(c)-1])
}
fn([]string{}, a)
return b
}
func main() {
a := []string{"a", "b", "c", "d", "e"}
b := comb(a)
for i, v := range b {
fmt.Printf("%0*b:", len(a), i)
fmt.Println(strings.Join(v, ","))
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment