参考: 格雷码的实现html
vector<string> getGrayCode(int num) { vector<string> result(num); if(num==1) { result[0]="0"; result[1]="1"; return result; } vector<string> last=getGrayCode(n-1); for(int i=0;i<last.size();i++) { result[i]="0"+last[i]; result[result.size()-1-i]="1"+last[i]; } return result; }
格雷码还有一种实现方式是根据这个公式来的 G(n) = B(n) XOR B(n+1), 这也是格雷码和二进制码的转换公式。代码以下:面试
public void getGrayCode(int bitNum){ for(int i = 0; i < (int)Math.pow(2, bitNum); i++){ int grayCode = (i >> 1) ^ i; System.out.println(num2Binary(grayCode, bitNum)); } } public String num2Binary(int num, int bitNum){ String ret = ""; for(int i = bitNum-1; i >= 0; i--){ ret += (num >> i) & 1; } return ret; }
参考:http://www.mitbbs.com/article_t/JobHunting/32003667.htmlgoogle