int *grayCode(int n, int *returnSize) { if (n < 0) { *returnSize = 0; return NULL; } if (n == 0) { *returnSize = 1; int *r = malloc(sizeof(int) * (*returnSize)); r[0] = 0; return r; } int sz1; int *r1 = grayCode(n - 1, &sz1); *returnSize = 2 * sz1; int *r = malloc(sizeof(int) * (*returnSize)); memcpy(r, r1, sizeof(int) * sz1); int i, bias = 1 << (n - 1); for (i = sz1; i != *returnSize; i++) { // reflect and add bias, That's why Gray code also named // Reflected-Binary-Code r[i] = r[*returnSize - 1 - i] + bias; } free(r1); return r; }
void SubSetTest::testGrayCode( void ) { vector<string> res = grayCode(3); for (int i = 0; i < res.size(); ++i) { cout<<res[i]<<" "; } cout<<endl; }
int main() { int rank = 5; int sz; int *r = grayCode(rank, &sz); int i, j; for (i = 0; i != sz; i++) { // show binary code for (j = rank - 1; j >= 0; j--) { printf("%d", r[i] & (1 << j) ? 1 : 0); } printf("\n"); } return 0; }
vector<int> grayCode(int n) { vector<int> v ; if(n == 0 ){ v.push_back(0); }else if(n == 1) { v.push_back(0); v.push_back(1); }else{ vector<int> w = grayCode(n-1); for(int i =0 ; i< w.size(); ++ i) v.push_back(w[i]) ; for(int i = w.size()-1; i>=0 ; --i) v.push_back( (1<<(n-1)) | w[i]); } return v; }
std::vector<int> grayCode(int n) { std::vector<int> gray_vec; if (n == 0) return std::vector<int>{0}; if (n == 1) { gray_vec.push_back(0); gray_vec.push_back(1); return gray_vec; } auto sub_vec = grayCode(n - 1); gray_vec.insert(gray_vec.begin(), sub_vec.begin(), sub_vec.end()); for (int i = sub_vec.size() - 1; i >= 0; i--){ int shift_num = 1 << (n - 1); gray_vec.push_back(sub_vec[i] + shift_num); } return gray_vec; }
vector<int> grayCode(int n) { // Start typing your C/C++ solution below // DO NOT write int main() function vector<int> ret; if (n == 0) { ret.push_back(0); } else { ret = grayCode(n - 1); vector<int> nxt = ret; reverse(nxt.begin(), nxt.end()); for (int i = 0; i < nxt.size(); ++i) { nxt[i] |= (1 << (n - 1)); } ret.insert(ret.end(), nxt.begin(), nxt.end()); } return ret; }
vector<string> SubSetTest::grayCode( int n ) { vector<string> code; code.resize(pow(2, n)); if(n == 1){ code[0] = "0"; code[1] = "1"; return code; } vector<string> last = grayCode(n - 1); for(int i = 0; i < last.size(); ++i){ code[i] = "0" + last[i]; code[code.size() - 1 - i] = last[i] + "1"; } return code; }
vector<int> grayCode(int n) { vector<int> tmp; if(n == 1) { tmp.push_back(0), tmp.push_back(1); return tmp; } else if(n == 0) { tmp.push_back(0); return tmp; } tmp = grayCode(n-1); vector<int> ans = tmp; for(int i = tmp.size()-1; i >= 0; i--) ans.push_back(tmp[i] + (1 << (n-1))); return ans; }
vector<int> grayCode(int n) { vector<int> res; if (n == 0) { res.push_back(0); } else if (n == 1) { res.push_back(0); res.push_back(1); } else if (n > 1) { vector<int> tmp = grayCode(n - 1); for (int i : tmp) { res.push_back(i); } tmp = reverseList(tmp); for (int i : tmp) { res.push_back(i | (1 << (n - 1))); } } return res; }
vector<int> grayCode(int n) { if (n == 0) { vector<int> result; result.push_back(0); return result; } if (n == 1) { vector<int> result; result.push_back(0); result.push_back(1); return result; } vector<int> ret = grayCode(n - 1), result(ret.size() * 2, 0); for (int i = 0; i < (int) ret.size(); i += 2) { result[2 * i] = ret[i] << 1; result[2 * i + 1] = (ret[i] << 1) + 1; result[2 * i + 2] = (ret[i + 1] << 1) + 1; result[2 * i + 3] = ret[i + 1] << 1; } return result; }
std::vector<int> grayCode(int n) { std::vector<int> graySeq; if(n == 0) { graySeq.push_back(0); return graySeq; } if(n == 1) { graySeq.push_back(0); graySeq.push_back(1); return graySeq; } graySeq = grayCode(n-1); int count = graySeq.size(); int movedBit = n-1; for(int i=count-1; i>=0; i--) { graySeq.push_back(graySeq[i]+(1<<movedBit)); } return graySeq; }
int main(void) { int *res, n; res = grayCode(1, &n); return(0); }
int main(){ grayCode(3); return 0; }