腾讯—生成格雷码

文章目录

  • 腾讯---生成格雷码
  • 一、题目描述
  • 二、分析
  • 三、代码

一、题目描述

在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同, 则称这种编码为格雷码(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;}
};

腾讯---生成格雷码相关推荐

  1. java 递归生成格雷码_格雷码的递归生成

    问题:产生n位元的全部格雷码.html 格雷码(Gray Code)是一个数列集合,每一个数使用二进位来表示,假设使用n位元来表示每一个数字,任两个数之间只有一个位元值不一样. 例如如下为3位元的格雷 ...

  2. python生成格雷码

    在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code). 第 N 个格雷码在 N^(N>>1) 的位中 ^ 按位异或,同0异1, >& ...

  3. 腾讯2016校招试题----------格雷码的实现

    问题:产生n位元的所有格雷码. 格雷码(Gray Code)是一个数列集合,每个数使用二进位来表示,假设使用n位元来表示每个数字,任两个数之间只有一个位元值不同. 例如以下为3位元的格雷码: 000 ...

  4. 3D 机器视觉 02 - FPGA生成N位元格雷码

    前言,FPGA是机器视觉里面经常用的的控制逻辑单元,并行处理速度快. 格雷码的生成方法中,通过异或的逻辑变化生成格雷码是最适合的方式. 举例一个位元为3的格雷码: 下面为一个位元为4的格雷码对比图 1 ...

  5. 格雷码基础和生成的几种方法

    1 格雷码: 1.1 格雷码引言: 在数字系统中,常要求代码按一定顺序变化. 在机器视觉里面,编码结构光也是按照一定的顺序进行变化,最常用的就是Binary,但是,二进制的纯粹的编码,由于二进制的进制 ...

  6. OpenCV捕获格雷码模式

    OpenCV捕获格雷码模式 捕获格雷码模式 目标 代码 解释 捕获格雷码模式 目标 在本教程中,您将学习如何使用GrayCodePattern类来: 生成格雷码模式. 投影格雷码图案. 捕获投影的格雷 ...

  7. 2018第九届蓝桥杯C/C++ B国赛 —— 第三题:格雷码

    格雷码 格雷码是以n位的二进制来表示数. 与普通的二进制表示不同的是,它要求相邻两个数字只能有1个数位不同. 首尾两个数字也要求只有1位之差. 有很多算法来生成格雷码.以下是较常见的一种: 从编码全0 ...

  8. Gray Code(格雷码) C++多方法实现

    简介 在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数之间也仅一位数不同,即"首尾相连",因此又称循环 ...

  9. Java 算法 格雷码

    目录标题 题目描述 解题思路 代码 题目描述 格雷码是以n位的二进制来表示数. 与普通的二进制表示不同的是,它要求相邻两个数字只能有1个数位不同. 首尾两个数字也要求只有1位之差. 有很多算法来生成格 ...

最新文章

  1. linux下java进程占用高问题分析过程
  2. 详述JavaScript数组
  3. Flink Forward Asia 2021 正式启动!议题火热征集中!
  4. 16行代码AC_Keeping Rabbits Gym - 102394K(附超时原因)
  5. 时间序列的截尾和拖尾_R语言:时间序列(一)
  6. vue-cli3.0打包时如何忽略某个第三方依赖包
  7. html + css + js 实现简易计算器
  8. (转)基于.Net的单点登录(SSO)解决方案(1)
  9. matlab GUI 设计
  10. 去了一趟字节跳动,被怼了!
  11. 嵌入式系统与人工智能 1
  12. python股票交易系统是如何实现自动交易的?
  13. 25项工程师必备技能 学习理论/学习曲线
  14. SQL获取当天0点0分0秒和23点59分59秒方法
  15. VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-S CALE IMAGE RECOGNITION-论文笔记
  16. 靠窗座位订票技能和退票省钱技能
  17. 晟盾科技加入龙蜥社区,共建开源新生态
  18. 【爬虫】【原创】pyspider抓取XX图片
  19. 开通财付通境外并将申请到的美国运通卡与paypal账户成功绑定
  20. 文科生读计算机博士,文科类哪些专业博士前景好?看完这篇就懂了!

热门文章

  1. WebSocket 的通信机制
  2. Django 2 零基础 - 待办清单网站
  3. 分贝(BD)的含义以及关系(有助于深刻理解)
  4. SAP Cloud for Customer使用移动设备访问系统的硬件要求
  5. BZOJ3298[USACO 2011Open]cow checkers——威佐夫博弈
  6. 功能表单之树形选择字段类型的高级使用——JEPLUS软件快速开发平台
  7. AR头显要上天!欧洲太空总署或用HoloLens维修太空站
  8. Java开发中JDBC连接数据库代码和步骤
  9. Android -- DragDrop
  10. 解决办法:“Cannot lock storage /data/hadoop/hdfs/name. The directory is already locked.”