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

分析:

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

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

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

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

此时又陷入自闭中。

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

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

转载于:https://www.cnblogs.com/CJT-blog/p/10603948.html

leecode第八十九题(格雷编码)相关推荐

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

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

  2. 经典算法题每日演练——第十九题 双端队列

    经典算法题每日演练--第十九题 双端队列 原文:经典算法题每日演练--第十九题 双端队列 话说大学的时候老师说妹子比工作重要~,工作可以再换,妹子这个...所以...这两个月也就一直忙着Fall in ...

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

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

  4. 八十九、Python的GUI系列 | 使用PyQt5 快速构建一个GUI 应用

    @Author:Runsen @Date:2020/7/11 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏 ...

  5. JavaScript学习(八十九)—数组练习题

    JavaScript学习(八十九)-数组练习题

  6. 第五章第二十九题(显示日历)(Display calendars)

    第五章第二十九题(显示日历)(Display calendars) **5.29(显示日历)编写程序,提示用户输入年份和代表该年的第一天是星期几的数字,然后在控制台上显示该年的日历表.例如,如果用户输 ...

  7. 《剑指offter》第十九题(js)

    第十九题 顺时针打印矩阵 题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...

  8. 前端歌谣的刷题之路-第八十五题-列表动态渲染

    前言 我是歌谣 我有个兄弟 巅峰的时候排名c站总榜19 叫前端小歌谣 曾经我花了三年的时间创作了他 现在我要用五年的时间超越他 今天又是接近兄弟的一天人生难免坎坷 大不了从头再来 歌谣的意志是永恒的 ...

  9. 耶鲁大学公开课博弈论(十八-十九)—— 信息集与最优子博弈

    耶鲁大学公开课博弈论(十八-十九)-- 信息集与最优子博弈 理论与概念 在十八讲中介绍了全局纳什均衡点的相关内容,主要就是通过引入信息集的概念将传统的同时博弈也转变为序贯博弈问题,从而使用逆向推理解决 ...

最新文章

  1. Gut:粪便病毒组移植减轻2型糖尿病和肥胖症模型小鼠的相关症状
  2. 在react-router中进行代码拆分
  3. 谈谈分布式的场景及分布式事务的解决方案
  4. 在使用Asp.net制作网站的时候遇到的问题(二)
  5. HTML学习笔记:iframe框架演示
  6. 正弦 sin 余弦 cos
  7. Java 208 道面试题:第一模块答案
  8. 面试官:Java 反射是什么?我回答不上来!
  9. UNITY服务器登录验证设计,Unity游戏登录模块流程(需验证)
  10. 如何使用DotfuscatorPro_4.9对软件进行加密
  11. 模糊综合评价模型(上)
  12. AVR单片机教程——UART进阶
  13. 玩真的了!深度解读拒不履行信息网络安全管理义务将入罪
  14. vue项目搭配elementui需要下载的东西
  15. 实现表格中的el-switch 开关切换
  16. 百度wz搜索竞价推广关键词转化成本计算
  17. 20岁后长高增高秘诀
  18. [转载]Numpy 基本除法运算和模运算
  19. 李敖之子李戡:《严正声明─我对韩…
  20. SETCLIENTID

热门文章

  1. java 函数参数 返回值_java中如何用函数返回值作为post提交的参数?
  2. java验证码实现简单_java实现简单的验证码功能
  3. Keras【Deep Learning With Python】逻辑回归·softmax多分类与交叉熵
  4. 全卷积神经网路【U-net项目实战】ISBI 挑战数据集图像分割-keras实现
  5. mysql空表不导出问题_解决Oracle 11g空表无法导出的问题
  6. vue打包后element-icon不显示问题解决
  7. 开展网络营销推广能为企业网站带来怎样的网络营销推广优势?
  8. 网络营销外包——网络营销外包专员如何系统化梳理网站优化方法
  9. 企业网站如何具备亲和力?
  10. 计算机电缆称赞千 捷网络下拉刷词,电脑常用技巧