题意:
解题思路:
思路:
1. 2的n次方 = 1 << n位
2. i >> 1 右移一位相当于除以2
3. i ^ (i >> 1) 异或相同为0,不同为1
0 ^ (0 / 2 = 0) = 0
1 ^ (1 / 2 = 0) = 1
2 ^ (2 / 2 = 1) = 3
3 ^ (3 / 2 = 1) = 2
PHP代码实现:
class Solution {
/**
* @param Integer $n
* @return Integer[]
*/
function grayCode($n) {
$res = [];
//2的n次方 = 1 << n位
for ($i = 0; $i < 1 << $n; $i ++) {
//$i >> 1 右移一位相当于除以2
//$i ^ ($i >> 1) 异或相同为0,不同为1
array_push($res, $i ^ $i >> 1);
}
return $res;
}
}
GO代码实现:
func grayCode(n int) []int {
res := []int{}
for i := 0; i < 1 << n; i++ {
res = append(res, i ^ i >> 1)
}
return res
}