class Solution {
public:
vector<int> grayCode(int n) {
vector<int> res;
res.push_back();//毕竟0开头
if(n==)
return res; vector<bool> index;//建立一个长为2^n的符号数组,目的是为了在检测过程中,判断某个数值是否已经被用过了
index.push_back(true);
for(int i=;i<pow(,n);i++)
index.push_back(false); int ans=;//从0开始
while(res.size()<pow(,n))//如果res数组还没满,就得继续找
{
int temp=;
while(index[ans^temp])//分别查看,当前值ans按第一位、第二位……反转之后的值的index数组是否为假,为假说明这个值即没被用过,又与当前值只有一位改变
temp=temp*;
res.push_back(ans^temp);//打入res
index[ans^temp]=true;//index这个值取真
ans=ans^temp;//当前值被赋予
} return res;
}
};

分析:

这个题有意思,我以前还学过数电,当年也是在书上也是认真推导过格雷编码的人,现在。。。

虽然忘了真正编码的过程,但是我看题目描述以及自己动手查看了一下,发现只要只改变一位,总会遍历全部的值,在这个基础上,我想到只改变一位瞎遍历,也不能全瞎,用一个辅助空间真假判断某个值是否已被遍历。

重点来了,本想建立一个n位的数组模拟二进制,然后每次按二进制方式求和,然后判断,此时我一度怀疑自己是不是走歪了路。

就在这时候,我突然想用异或,遍历当前值和所有值,然后对结果检查1的个数,如果为1,再去判断是否被用过。

此时又陷入自闭中。

这个时候,我想如果直接改变1位直接进行判断,是不是对当前值异或0001,0010,0100,1000这样子就可以了,是不是直接用数字1,2,4,8异或也可以,哎我去,还真行,而且越想越觉得方便,连二进制向十进制转换都省了。

激动的我带点后悔,别把我面试想算法的运气都花光了啊。

leecode第八十九题(格雷编码)的更多相关文章

  1. leecode第五十九题(螺旋矩阵 II)

    class Solution { public: vector<vector<int>> generateMatrix(int n) { )//特殊情况 { vector< ...

  2. 【leetcode 简单】 第八十九题 赎金信

    给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串ransom能不能由第二个字符串magazines里面的字符构成.如果可以构成,返回 true :否则返回 ...

  3. 第三百八十九节,Django+Xadmin打造上线标准的在线教育平台—列表筛选结合分页

    第三百八十九节,Django+Xadmin打造上线标准的在线教育平台—列表筛选结合分页 根据用户的筛选条件来结合分页 实现原理就是,当用户点击一个筛选条件时,通过get请求方式传参将筛选的id或者值, ...

  4. “全栈2019”Java第八十九章:接口中能定义内部类吗?

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  5. (八十九)c#Winform自定义控件-自定义滚动条(treeview、panel、datagridview、listbox、listview、textbox)

    官网 http://www.hzhcontrols.com/ 前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kw ...

  6. leecode第一百六十九题(求众数)

    class Solution { public: void quick_sort(vector<int>& nums,int res,int res_end) { )//错过,不能 ...

  7. leecode第八十八题(合并两个有序数组)

    class Solution { public: void merge(vector<int>& nums1, int m, vector<int>& nums ...

  8. salesforce零基础学习(八十九)使用 input type=file 以及RemoteAction方式上传附件

    在classic环境中,salesforce提供了<apex:inputFile>标签用来实现附件的上传以及内容获取.salesforce 零基础学习(二十四)解析csv格式内容中有类似的 ...

  9. leecode第四十六题(全排列)

    class Solution { public: vector<vector<int>> permute(vector<int>& nums) { int ...

随机推荐

  1. Django XSS攻击

    Django XSS攻击 XSS(cross-site scripting跨域脚本攻击)攻击是最常见的web攻击,其特点是“跨域”和“客户端执行”,XSS攻击分为三种: Reflected XSS(基 ...

  2. MySQL乐观锁和悲观锁的概念和原理

    乐观锁:在取数据时不加锁,等处理完逻辑的时候,查看是否与上一次相同,若相同则更新,若不同则拒绝. 悲观锁:在取数据时就加上锁,只有更新完数据之后,别的用户才可以进行读. (个人总结)

  3. java jdbc->mycat->oracle SqlException异常中文信息乱码解决

    mycat字符集gbk oracle字符集gbk 原jdbc连接串: base.jdbc.url=jdbc:mysql://127.0.0.1:3306/XXX?useUnicode=true& ...

  4. dubbo rpc调用抛出的Exception处理

    关于dubbo的Exception堆栈被吃处理,网上已经有比较多的解决方法,在我们的应用场景中,不希望RPC调用对方抛出业务exception,而是通过Resp中的errorCode,errorMsg ...

  5. Access导出excel

    SELECT * INTO [excel .xls].Sheet1 FROM tableName

  6. 前端 --- 1 HTML

    一.文档结构 <!DOCTYPE html> <html lang="zh-CN"> #这个lang表示语言,zh-CN是中文的意思, 如果以英文为主,就写 ...

  7. Eclipse中一个项目调用另一个项目的资源

    如果一个项目A想要引用另一个项目B的资源的话,按照一下步骤进行设置: 右键点击项目A---->>>Build Path--->>>Configure Build P ...

  8. Junit的套件使用

    定义一个类,在类的上方添加@RunWith(Suite.class)和@SuiteClasses({XX.class,YY.class,...}) 实例有两个类分别为:public class Log ...

  9. Python3 tkinter基础 Entry state 不可写 可以选 可复制的输入框

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  10. 【做题】spoj4060 A game with probability——dp

    赛前做题时忽然发现自己概率博弈类dp很弱,心好慌.(获胜概率或最优解期望) 于是就做了这道题,续了特别久. 一开始列dp式子的时候就花了很长时间,首先搞错了两次,然后忘记了根据上一轮dp值直接确定选什 ...