Gray Code Solutions in C++
Number 89
Difficulty Medium
Acceptance 49.2%
Link LeetCode
Other languages Go
Solutions
C++ solution by haoel/leetcode
// Source : https://oj.leetcode.com/problems/gray-code/// Author : Hao Chen// Date : 2014-06-20#include <stdio.h>#include <stdlib.h>#include <time.h>#include <iostream>#include <vector>using namespace std;/** I designed the following stupid algorithm base on the blow observation** I noticed I can use a `mirror-like` binary tree to figure out the gray code.** For example:** 0* __/ \__* 0 1* / \ / \* 0 1 1 0* So, the gray code as below: (top-down, from left to right)** 0 0 0* 0 0 1* 0 1 1* 0 1 0** 0* _____/ \_____* 0 1* __/ \__ __/ \__* 0 1 1 0* / \ / \ / \ / \* 0 1 1 0 0 1 1 0** So, the gray code as below:** 0 0 0 0* 0 0 0 1* 0 0 1 1* 0 0 1 0* 0 1 1 0* 0 1 1 1* 0 1 0 1* 0 1 0 0*/vector<int> grayCode01(int n) {vector<int> v;//n = 1<<n;int x =0;v.push_back(x);for(int i=0; i<n; i++){int len = v.size();for (int j=0; j<len; j++){x = v[j]<<1;if (j%2==0){v.push_back(x);v.push_back(x+1);}else{v.push_back(x+1);v.push_back(x);}}v.erase(v.begin(), v.begin()+len);}return v;}/** Actually, there is a better way.* The mathematical way is: (num >> 1) ^ num;* Please refer to http://en.wikipedia.org/wiki/Gray_code*/vector<int> grayCode02(int n) {vector<int> ret;int size = 1 << n;for(int i = 0; i < size; ++i) {ret.push_back((i >> 1)^i);}return ret;}//random invokervector<int> grayCode(int n) {srand(time(0));if (rand()%2){return grayCode01(n);}return grayCode02(n);}void printBits(int n, int len){for(int i=len-1; i>=0; i--) {if (n & (1<<i)) {printf("1");}else{printf("0");}}}void printVector(vector<int>& v, int bit_len){vector<int>::iterator it;for(it=v.begin(); it!=v.end(); ++it){//bitset<bit_len> bin(*it);printBits(*it, bit_len);cout << " ";//cout << *it << " ";}cout << endl;}int main(int argc, char** argv){int n = 2;if (argc>1){n = atoi(argv[1]);}vector<int> v = grayCode(n);printVector(v, n);return 0;}
C++ solution by pezy/LeetCode
#include <vector>using std::vector;class Solution {public:vector<int> grayCode(int n) {vector<int> vec;for (int i = 0; i != 1<<n; ++i)vec.push_back(i/2^i);return vec;}};
C++ solution by liuyubobobo/Play-Leetcode
/// Source : https://leetcode.com/problems/gray-code//// Author : liuyubobobo/// Time : 2019-11-05#include <iostream>#include <vector>using namespace std;/// Recursion/// Time Complexity: O(2^n)/// Space Complexity: O(n)class Solution {public:vector<int> grayCode(int n) {if(n == 0) return {0};vector<int> res = grayCode(n - 1);for(int i = res.size() - 1; i >= 0; i --)res.push_back((1 << (n - 1)) + res[i]);return res;}};int main() {return 0;}
C++ solution by liuyubobobo/Play-Leetcode
/// Source : https://leetcode.com/problems/gray-code//// Author : liuyubobobo/// Time : 2019-11-05#include <iostream>#include <vector>using namespace std;/// Recurrence/// Time Complexity: O(2^n)/// Space Complexity: O(1)class Solution {public:vector<int> grayCode(int n) {vector<int> res = {0};for(int i = 0; i < n; i ++){for(int j = res.size() - 1; j >= 0; j --)res.push_back((1 << i) + res[j]);}return res;}};int main() {return 0;}
C++ solution by liuyubobobo/Play-Leetcode
/// Source : https://leetcode.com/problems/gray-code//// Author : liuyubobobo/// Time : 2019-11-06#include <iostream>#include <vector>using namespace std;/// Gray Code Xor Formula/// Time Complexity: O(2^n)/// Space Complexity: O(1)class Solution {public:vector<int> grayCode(int n) {vector<int> res;for(int i = 0; i < (1 << n); i ++)res.push_back(i ^ (i >> 1));return res;}};int main() {return 0;}