博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【leetcode】Gray Code (middle)
阅读量:6612 次
发布时间:2019-06-24

本文共 1567 字,大约阅读时间需要 5 分钟。

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 - 001 - 111 - 310 - 2

 

思路: Gray Code的意思就是n位的二进制序列,相邻两个只有一位不同。观察

000 - 0001 - 1011 - 3010 - 2 110 - 6 111 - 7 101 - 5 100 - 4

第0位的序列为 01 10 01 这样不断重复

第1位的序列为 0011 1100

第2位的序列为 11110000

这样我们就找到了规律。

 

我最开始是通过判段每次是第几位变化,通过异或得到新值。 每次第k为变化时满足 i = 2k + n*2(k+1)

vector
grayCode(int n) { vector
ans; ans.push_back(0); if(n == 0) return ans; for(int i = 1; i < (1 << n); i++) { int bit_change = 0; for(int j = 0; j < n; j++) { if(i % (1 << (j + 1)) - (1 << j) == 0) { bit_change = j; break; } } int cur = (1 << bit_change); cur ^= ans.back(); ans.push_back(cur); } return ans; }

 

后来看其他人的发现更简单的方法

vector
grayCode2(int n) { vector
ans; ans.push_back(0); if(n == 0) return ans; for(int i = 0; i < n; i++) { int inc = 1 << i; for(int j = ans.size() - 1; j >= 0; j--) //每次等第i - 1位正反序都存完毕时,第i位起始为0的情况也存储完了, 只需存储第i位起始为1并且低位倒序输出 { ans.push_back(ans[j] + inc); } } return ans; }

 

转载地址:http://ogxso.baihongyu.com/

你可能感兴趣的文章
springboot docker笔记
查看>>
mysql char和varchar区别
查看>>
Modbus RTU 通信工具设计
查看>>
服务化改造实践 | 如何在 Dubbo 中支持 REST
查看>>
Logwatch linux日志监视器解析
查看>>
【第8章】JVM内存管理
查看>>
在绿色的河流上
查看>>
ovirt官方安装文档 附录G
查看>>
磁盘故障小案例
查看>>
了解相关.NET Framework不同组件区别及安装知识
查看>>
ToughRADIUS快速指南
查看>>
HTML
查看>>
【转】左手坐标系和右手坐标系
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
POJ 3335 Rotating Scoreboard 半平面交
查看>>
window.location.href和window.location.replace的区别
查看>>
《Gamestorming》读书笔记
查看>>
域名和网址链接被微信浏览器拦截怎么办 微信屏蔽网址打开如何解决
查看>>
使用SQL Server Analysis Services数据挖掘的关联规则实现商品推荐功能(二)
查看>>