給一個 n,要做出他的格雷編碼(gray code)(長度會為 2 的 n 次方)
e.g. n = 2:00、01、11、10
e.g. n = 3:000、001、011、010、110、111、101、100
e.g. n = 4:0000、0001、0011、0010、0110、0111、0101、0100、1100、1101、1111、1100、1010、1011、1001、1000
至於【2 的 n 次方】實現方式:1 << n
(就是看要把 1 左移幾位)
格雷編碼的位元操作原理為:Gray(i) = i ^ (i >> 1)
class Solution {
public:
vector<int> grayCode(int n) {
vector<int> ans;
for(int i=0;i<(1 << n);i++){
int temp = i ^ (i >> 1);
ans.push_back(temp);
}
return ans;
}
};