89.go 567 B

1234567891011121314151617181920212223242526272829303132333435
  1. package main
  2. // generate gray code directly
  3. func grayCodeOld(n int) []int {
  4. res := make([]int, 1<<uint(n))
  5. code := 0
  6. for i := 1; i < 1<<uint(n); i++ {
  7. if i&1 == 1 {
  8. code ^= 1
  9. } else {
  10. base := 1
  11. for ; base&code == 0; base <<= 1 {
  12. }
  13. code ^= base << 1
  14. }
  15. res[i] = code
  16. }
  17. return res
  18. }
  19. func grayCode(n int) (res []int) {
  20. m := uint(n)
  21. // binary to gray code: G(n) = (B(n)/2) xor B(n)
  22. // form wikipedia
  23. for i := 0; i < 1<<m; i++ {
  24. res = append(res, i)
  25. res[i] ^= res[i] >> 1
  26. }
  27. return
  28. }
  29. /* func main() {
  30. fmt.Println(grayCode(2))
  31. } */