为什么80%的码农都做不了架构师?>>>   

Question

89. Gray Code

Solution

思路:

n = 0   0
n = 1   0   1
n = 2  00  01  10  11
n = 3 000 001 010 011 100 101 110 111

Java实现:

public List<Integer> grayCode(int n) {List<Integer> list = new ArrayList<>();grayCode(n, 0, list);return list;
}void grayCode(int n, int cur, List<Integer> list) {if (cur == 0) {list.add(0);} else if (cur == 1) {list.add(1);} else {int tmpSize = list.size();for (int i = tmpSize - 1; i >= 0; i--) {// int tmp = 1 << (cur - 1);// System.out.println(tmp + "\t" + list.get(i) + "\t" + (list.get(i) | tmp));list.add(list.get(i) | (1 << (cur - 1)));}}if (cur < n) grayCode(n, cur + 1, list);
}

Reference

格雷码是很经典的问题,规则其实很简单,在二进制形式下,任何响铃的两个值的二进制表示形式只有一位是不同的,我们可以找找规律。

一位就是简单的:0,1

两位是:00,01,11,10

三位是:000,001,011,010,110,111,101,100

发现什么规律没有?我们把一位的两个数,前面加上0,就是二位的头两个数,前面加上1再反序,就是二位的后两个数。把二位的前面加上0,就是三位的头四个数,把二位的前面加上1再反过来,就是三位的后四个数。

也就是说,对于每多一位的格雷码,前面一半的第一位都是0,后面一半的第一位都是1,其余的位,前后两半正好是中间对称的,前面一半就是少一位的格雷码序列,后面一半时把其反序。

知道这个规律就好做了,我们可以递归来做,每次取n-1位的格雷码来做上述操作,对于一位的格雷码,直接赋值是0,1就可以了。

不过题目要求返回的是十进制数,而不是字符串,所以我们最好直接操作十进制数,这里前面加0其实就不用做什么,前面加1的话可以将1左移n-1位然后与各个数字相加即可。

注意题目说的n是非负数,所以要考虑n=0的情况,测试用例的n=0时返回的是0。

转载于:https://my.oschina.net/yysue/blog/1835830

89. Gray Code - LeetCode相关推荐

  1. 【格雷码】LeetCode 89. Gray Code

    LeetCode 89. Gray Code Solution1:我的答案 穷举法,比较笨 注意:牢记vector中find()函数的用法 class Solution { public:vector ...

  2. [LeetCode]89.Gray Code

    [题目] The gray code is a binary numeral system where two successive values differ in only one bit. Gi ...

  3. Gray Code LeetCode 89

    题目:The gray code is a binary numeral system where two successive values differ in only one bit. Give ...

  4. LeetCode(89):格雷编码 Gray Code(Java)

    2019.7.19 #程序员笔试必备# LeetCode 从零单刷个人笔记整理(持续更新) 智力题,本题的关键在于搞清楚格雷编码的生成过程, G(i) = i ^ (i/2). 如 n = 3: G( ...

  5. LeetCode Gray Code(回溯法)

    问题:gray code是一种二进制数字系统,两个连续的数只有一位不同.给出一个正整数n,n表示gray code的位数,输出gray code. 思路:使用回溯法.通过枚举0,1,2,3的gray ...

  6. [LeetCode]Gray Code

    题目描述:(链接) The gray code is a binary numeral system where two successive values differ in only one bi ...

  7. leetcode笔记:Gray Code(2016腾讯软件开发笔试题)

    2019独角兽企业重金招聘Python工程师标准>>> 一.题目描述 The gray code is a binary numeral system where two succe ...

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

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

  9. Ural 1780 Gray Code 乱搞暴力

    原题链接:http://acm.timus.ru/problem.aspx?space=1&num=1780 1780. Gray Code Time limit: 0.5 second Me ...

最新文章

  1. Sentry--错误日志收集框架
  2. android textview改变部分文字的颜色和string.xml中文字的替换及部分内容设置颜色、字体、超链接、图片...
  3. CSS实现文字环绕图片
  4. ★ 让你的虚机飞起来 ★
  5. python相关软件安装
  6. Codeforces 724C Ray Tracing 扩展欧几里得
  7. tomcat上传文件到不同服务器,使用SpringMVC进行跨服务器上传文件出现的那些坑
  8. 亚信java在线测评题库_校招秋招,网申在线测评如何训练才能通过?
  9. Nginx应用场景之静态服务器
  10. silverlight 二级导航
  11. Spring自带的工具类总结
  12. hash冲突以及hash冲突的解决方法
  13. 案例|工业物联网解决方案·智慧钢厂高性能安全数采
  14. js中indexOf的用法
  15. 线性回归模型-误差分析
  16. javashop源码,javashop电商系统源码授权
  17. 移动端适配之一:到底什么是像素
  18. 任务调度之Elastic-Job
  19. Lotus Sametime
  20. 全国24小时降水量pyecharts可视化分析

热门文章

  1. C ++ STL中的set :: upper_bound()函数
  2. 设计一个较为合理的实验方案来研究芳纶纤维的染色热力学性能
  3. Java——线程的四种不同形式
  4. yuv编码成h264格式写成文件
  5. 装配图位置偏转怎么调整_物理微课|匀变速直线运动、电容器动态分析及磁偏转技巧、方法、模型...
  6. java jtable刷新_java-单击按钮更新JTable
  7. c语言编写的每个函数都可以进行独立的编译,2017年辽宁师范大学计算机与信息技术学院836C语言程序设计考研冲刺密押题...
  8. Linux的ext4文件系统学习笔记
  9. 【C++ Priemr | 15】派生类向基类转换的可访问性
  10. java基础的三个框架,进阶学习资料!