1234567891011121314151617181920212223242526272829303132333435 |
- package main
- // generate gray code directly
- func grayCodeOld(n int) []int {
- res := make([]int, 1<<uint(n))
- code := 0
- for i := 1; i < 1<<uint(n); i++ {
- if i&1 == 1 {
- code ^= 1
- } else {
- base := 1
- for ; base&code == 0; base <<= 1 {
- }
- code ^= base << 1
- }
- res[i] = code
- }
- return res
- }
- func grayCode(n int) (res []int) {
- m := uint(n)
- // binary to gray code: G(n) = (B(n)/2) xor B(n)
- // form wikipedia
- for i := 0; i < 1<<m; i++ {
- res = append(res, i)
- res[i] ^= res[i] >> 1
- }
- return
- }
- /* func main() {
- fmt.Println(grayCode(2))
- } */
|