腾讯---生成格雷码
腾讯—生成格雷码
文章目录
- 腾讯---生成格雷码
- 一、题目描述
- 二、分析
- 三、代码
一、题目描述
在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同
, 则称这种编码为格雷码(Gray Code),请编写一个函数,使用递归的方法生成N位的格雷码
。
给定一个整数n,请返回n位的格雷码,顺序为从0开始
。
测试样例:
1
返回:["0","1"]
二、分析
既然是递归,就相当于找规律!
首先递归的出口在哪里??
当n==1时就是递归的出口
gray码为(0,1)
那么n== 2时和n==1时的格雷码有什么关系呢?用脑袋去递归是想显摆你内存大吗。所以先写出来找规律:
n==2时
gray码为(00,01,11,10)
目前规律不明显,那就把n==3的格雷码写出来:
当n==3时
gray码为(000,001,011,010,110,111,101,100)
到这里规律就出来了!!!
- n== 3时的格雷码是
在n==2的格雷码的头部添加0或者1
; - 但是你还需要注意添加0和1的区别:
- 添加0时:
直接在n==2的每个格雷码头部添加0
; - 添加1时:
直接在n==2的每个格雷码头部添加1,再反转一下顺序
使其满足题意; - 最后把添加0和1的所有情况组合起来
三、代码
class GrayCode {public:vector<string> getGray(int n) {// write code hereif(n == 1){return {"0","1"};}vector<string> s1 = getGray(n - 1);//递归调用vector<string> s2(2 * s1.size());for(int i = 0;i < s1.size();i++){s2[i] = "0" + s1[i];//首位添加0//首位添加1,注意需要顺序反向s2[i + s1.size()] = "1" + s1[s1.size() - 1 - i];}return s2;}
};
腾讯---生成格雷码相关推荐
- java 递归生成格雷码_格雷码的递归生成
问题:产生n位元的全部格雷码.html 格雷码(Gray Code)是一个数列集合,每一个数使用二进位来表示,假设使用n位元来表示每一个数字,任两个数之间只有一个位元值不一样. 例如如下为3位元的格雷 ...
- python生成格雷码
在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code). 第 N 个格雷码在 N^(N>>1) 的位中 ^ 按位异或,同0异1, >& ...
- 腾讯2016校招试题----------格雷码的实现
问题:产生n位元的所有格雷码. 格雷码(Gray Code)是一个数列集合,每个数使用二进位来表示,假设使用n位元来表示每个数字,任两个数之间只有一个位元值不同. 例如以下为3位元的格雷码: 000 ...
- 3D 机器视觉 02 - FPGA生成N位元格雷码
前言,FPGA是机器视觉里面经常用的的控制逻辑单元,并行处理速度快. 格雷码的生成方法中,通过异或的逻辑变化生成格雷码是最适合的方式. 举例一个位元为3的格雷码: 下面为一个位元为4的格雷码对比图 1 ...
- 格雷码基础和生成的几种方法
1 格雷码: 1.1 格雷码引言: 在数字系统中,常要求代码按一定顺序变化. 在机器视觉里面,编码结构光也是按照一定的顺序进行变化,最常用的就是Binary,但是,二进制的纯粹的编码,由于二进制的进制 ...
- OpenCV捕获格雷码模式
OpenCV捕获格雷码模式 捕获格雷码模式 目标 代码 解释 捕获格雷码模式 目标 在本教程中,您将学习如何使用GrayCodePattern类来: 生成格雷码模式. 投影格雷码图案. 捕获投影的格雷 ...
- 2018第九届蓝桥杯C/C++ B国赛 —— 第三题:格雷码
格雷码 格雷码是以n位的二进制来表示数. 与普通的二进制表示不同的是,它要求相邻两个数字只能有1个数位不同. 首尾两个数字也要求只有1位之差. 有很多算法来生成格雷码.以下是较常见的一种: 从编码全0 ...
- Gray Code(格雷码) C++多方法实现
简介 在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数之间也仅一位数不同,即"首尾相连",因此又称循环 ...
- Java 算法 格雷码
目录标题 题目描述 解题思路 代码 题目描述 格雷码是以n位的二进制来表示数. 与普通的二进制表示不同的是,它要求相邻两个数字只能有1个数位不同. 首尾两个数字也要求只有1位之差. 有很多算法来生成格 ...
最新文章
- linux下java进程占用高问题分析过程
- 详述JavaScript数组
- Flink Forward Asia 2021 正式启动!议题火热征集中!
- 16行代码AC_Keeping Rabbits Gym - 102394K(附超时原因)
- 时间序列的截尾和拖尾_R语言:时间序列(一)
- vue-cli3.0打包时如何忽略某个第三方依赖包
- html + css + js 实现简易计算器
- (转)基于.Net的单点登录(SSO)解决方案(1)
- matlab GUI 设计
- 去了一趟字节跳动,被怼了!
- 嵌入式系统与人工智能 1
- python股票交易系统是如何实现自动交易的?
- 25项工程师必备技能 学习理论/学习曲线
- SQL获取当天0点0分0秒和23点59分59秒方法
- VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-S CALE IMAGE RECOGNITION-论文笔记
- 靠窗座位订票技能和退票省钱技能
- 晟盾科技加入龙蜥社区,共建开源新生态
- 【爬虫】【原创】pyspider抓取XX图片
- 开通财付通境外并将申请到的美国运通卡与paypal账户成功绑定
- 文科生读计算机博士,文科类哪些专业博士前景好?看完这篇就懂了!
热门文章
- WebSocket 的通信机制
- Django 2 零基础 - 待办清单网站
- 分贝(BD)的含义以及关系(有助于深刻理解)
- SAP Cloud for Customer使用移动设备访问系统的硬件要求
- BZOJ3298[USACO 2011Open]cow checkers——威佐夫博弈
- 功能表单之树形选择字段类型的高级使用——JEPLUS软件快速开发平台
- AR头显要上天!欧洲太空总署或用HoloLens维修太空站
- Java开发中JDBC连接数据库代码和步骤
- Android -- DragDrop
- 解决办法:“Cannot lock storage /data/hadoop/hdfs/name. The directory is already locked.”