题意:

image.png

解题思路:

  1. 思路:
  2. 1. 2n次方 = 1 << n
  3. 2. i >> 1 右移一位相当于除以2
  4. 3. i ^ (i >> 1) 异或相同为0,不同为1
  5. 0 ^ (0 / 2 = 0) = 0
  6. 1 ^ (1 / 2 = 0) = 1
  7. 2 ^ (2 / 2 = 1) = 3
  8. 3 ^ (3 / 2 = 1) = 2

PHP代码实现:

  1. class Solution {
  2. /**
  3. * @param Integer $n
  4. * @return Integer[]
  5. */
  6. function grayCode($n) {
  7. $res = [];
  8. //2的n次方 = 1 << n位
  9. for ($i = 0; $i < 1 << $n; $i ++) {
  10. //$i >> 1 右移一位相当于除以2
  11. //$i ^ ($i >> 1) 异或相同为0,不同为1
  12. array_push($res, $i ^ $i >> 1);
  13. }
  14. return $res;
  15. }
  16. }

GO代码实现:

  1. func grayCode(n int) []int {
  2. res := []int{}
  3. for i := 0; i < 1 << n; i++ {
  4. res = append(res, i ^ i >> 1)
  5. }
  6. return res
  7. }