leetcode笔记:Gray Code(2016腾讯软件开发笔试题)

一.题目描述

The gray code is a binary numeral system where two successive values differ in only one bit.

Given a non-negative integer n representing the total number of bits in the code, print the sequence of

gray code. A gray code sequence must begin with 0.

For example, given n = 2, return [0,1,3,2]. Its gray code sequence is:

00 - 0

01 - 1

11 - 3

10 - 2

Note:

• For a given n, a gray code sequence is not uniquely defined.

• For example, [0,2,3,1] is also a valid gray code sequence according to the above definition.

• For now, the judge is able to judge based on one instance of gray code sequence. Sorry about that.

class Solution
{
public:
  vector<int> buildGrayCode(int n)
  {
  }
  
  
  int ans(int n)
  {
      //每一位都 i & (i -1)
      vector<int> vec;
      int x = 1 << n;
      for(int i=0; i<x; i++)
      {
      vec.push_back(i & (i>>1));
      cout << vec[i] << ' ';
      }
      return vec;
  }
  
  //可以改成递归
  int recur_ans(int n)
  {
    vector<int> vec;
    if(n < 0 ) return vec;
    if(n == 1) {
        vec.push_back(0);
        vec.push_back(1);
        return vec;
    }
    for(int i=2; i<n; i++)
    {
      int highbit = 1 << (i - 1);
      for(int j = vec.size() -1; j>=0; j--)
      {
          vec.push_back(highbit|j);
      }
    }
    return vec;
  }
   
   
  vector<int> recur_ans2(int n)
  {
	  if(n ==0)
	  {
		  vector<int> vec;
		  vec.push_back(0);
		  return vec;
	  }else{
		  vector<int> res = recur_ans2(n-1);
		  int len = res.size();
		  int highbit = 1 << (n-1);
		  for(int i=len-1; i>=0; i--)
		  {
			  res.push_back(res[i] | highbit );
		  }
		  return res;
	  }
  }
};


你可能感兴趣的:(gray_code,格雷马)