89. Gray Code - LeetCode
为什么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相关推荐
- 【格雷码】LeetCode 89. Gray Code
LeetCode 89. Gray Code Solution1:我的答案 穷举法,比较笨 注意:牢记vector中find()函数的用法 class Solution { public:vector ...
- [LeetCode]89.Gray Code
[题目] The gray code is a binary numeral system where two successive values differ in only one bit. Gi ...
- Gray Code LeetCode 89
题目:The gray code is a binary numeral system where two successive values differ in only one bit. Give ...
- LeetCode(89):格雷编码 Gray Code(Java)
2019.7.19 #程序员笔试必备# LeetCode 从零单刷个人笔记整理(持续更新) 智力题,本题的关键在于搞清楚格雷编码的生成过程, G(i) = i ^ (i/2). 如 n = 3: G( ...
- LeetCode Gray Code(回溯法)
问题:gray code是一种二进制数字系统,两个连续的数只有一位不同.给出一个正整数n,n表示gray code的位数,输出gray code. 思路:使用回溯法.通过枚举0,1,2,3的gray ...
- [LeetCode]Gray Code
题目描述:(链接) The gray code is a binary numeral system where two successive values differ in only one bi ...
- leetcode笔记:Gray Code(2016腾讯软件开发笔试题)
2019独角兽企业重金招聘Python工程师标准>>> 一.题目描述 The gray code is a binary numeral system where two succe ...
- Gray Code(格雷码) C++多方法实现
简介 在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数之间也仅一位数不同,即"首尾相连",因此又称循环 ...
- Ural 1780 Gray Code 乱搞暴力
原题链接:http://acm.timus.ru/problem.aspx?space=1&num=1780 1780. Gray Code Time limit: 0.5 second Me ...
最新文章
- Sentry--错误日志收集框架
- android textview改变部分文字的颜色和string.xml中文字的替换及部分内容设置颜色、字体、超链接、图片...
- CSS实现文字环绕图片
- ★ 让你的虚机飞起来 ★
- python相关软件安装
- Codeforces 724C Ray Tracing 扩展欧几里得
- tomcat上传文件到不同服务器,使用SpringMVC进行跨服务器上传文件出现的那些坑
- 亚信java在线测评题库_校招秋招,网申在线测评如何训练才能通过?
- Nginx应用场景之静态服务器
- silverlight 二级导航
- Spring自带的工具类总结
- hash冲突以及hash冲突的解决方法
- 案例|工业物联网解决方案·智慧钢厂高性能安全数采
- js中indexOf的用法
- 线性回归模型-误差分析
- javashop源码,javashop电商系统源码授权
- 移动端适配之一:到底什么是像素
- 任务调度之Elastic-Job
- Lotus Sametime
- 全国24小时降水量pyecharts可视化分析
热门文章
- C ++ STL中的set :: upper_bound()函数
- 设计一个较为合理的实验方案来研究芳纶纤维的染色热力学性能
- Java——线程的四种不同形式
- yuv编码成h264格式写成文件
- 装配图位置偏转怎么调整_物理微课|匀变速直线运动、电容器动态分析及磁偏转技巧、方法、模型...
- java jtable刷新_java-单击按钮更新JTable
- c语言编写的每个函数都可以进行独立的编译,2017年辽宁师范大学计算机与信息技术学院836C语言程序设计考研冲刺密押题...
- Linux的ext4文件系统学习笔记
- 【C++ Priemr | 15】派生类向基类转换的可访问性
- java基础的三个框架,进阶学习资料!