Leetcode 89. 格雷編碼
阿新 • • 發佈:2018-12-10
格雷編碼是一個二進位制數字系統,在該系統中,兩個連續的數值僅有一個位數的差異。
給定一個代表編碼總位數的非負整數 n,列印其格雷編碼序列。格雷編碼序列必須以 0 開頭。
示例 1:
輸入: 2 輸出:[0,1,3,2]
解釋: 00 - 0 01 - 1 11 - 3 10 - 2 對於給定的 n,其格雷編碼序列並不唯一。 例如,[0,2,3,1]
也是一個有效的格雷編碼序列。 00 - 0 10 - 2 11 - 3 01 - 1
基本思路:很簡單
- 對於0來說 就是0 ,對於1來說為0和1,及在0的基礎上增加了一個2的0次方。
- 對於2來說是 0 1 3 2是不是在0,1的基礎上都加上了2的1次方。
- 以此類推……
- 注意,如果直接相加的話結果會是0,1,2,3。這不是我們想要的結果,所以在函式_grayCode中將Tem陣列進行reverse。
AC解:
class Solution { public: vector<int> grayCode(int n) { vector<int> Res(1,0); for (int i = 1; i <= n; i++) { _grayCode(Res, pow(2, i - 1)); } return Res; } void _grayCode(vector<int> &Res, int Now_Value) { vector<int> Tem = Res; reverse(Tem.begin(), Tem.end()); for (int i = 0; i < Tem.size(); i++) { Tem[i] += Now_Value; } Res.insert(Res.end(), Tem.begin(), Tem.end()); } };