89. Gray Code - LeetCode

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/390203.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

400. 第 N 位数字

400. 第 N 位数字 在无限的整数序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, …中找到第 n 位数字。 注意&#xff1a;n 是正数且在 32 位整数范围内&#xff08;n < 231&#xff09;。 示例 1&#xff1a; 输入&#xff1a;3 输出&#xff1a;3 示例 2&#xff1a; 输入&…

1.初识Linux

1.Linux 区分大小写 2.shell命令行-bash 进入终端->[stulocalhost~]$ (其中,Stu为登录用户名&#xff0c;localhost为登录主机名&#xff0c;’~’ 表示当前用户正处在stu用户的家目录中, 普通用户的提示符以$结尾&#xff0c;而根用户以’#’结尾) 3.Linux中所谓的命令(…

这份NLP研究进展汇总请收好,GitHub连续3天最火的都是它

最近&#xff0c;有一份自然语言处理 (NLP) 进展合辑&#xff0c;一发布就受到了同性交友网站用户的疯狂标星&#xff0c;已经连续3天高居GitHub热门榜首位。 合集里面包括&#xff0c;20多种NLP任务前赴后继的研究成果&#xff0c;以及用到的数据集。 这是来自爱尔兰的Sebasti…

基于模型的嵌入式开发流程_如何使用基于模型的测试来改善工作流程

基于模型的嵌入式开发流程Unit testing is not enough – so lets start using model-based testing to improve our workflows.单元测试还不够–因此&#xff0c;让我们开始使用基于模型的测试来改善我们的工作流程。 Software testing is an important phase in building a …

166. 分数到小数

166. 分数到小数 给定两个整数&#xff0c;分别表示分数的分子 numerator 和分母 denominator&#xff0c;以 字符串形式返回小数 。 如果小数部分为循环小数&#xff0c;则将循环的部分括在括号内。 如果存在多个答案&#xff0c;只需返回 任意一个 。 对于所有给定的输入…

最近用.NET实现DHT爬虫,全.NET实现

最近用.NET实现DHT爬虫&#xff0c;全.NET实现&#xff0c;大家可以加我QQ交流下 309159808 转载于:https://www.cnblogs.com/oshoh/p/9236186.html

C++贪吃蛇

动画链接 GitHub链接&#xff1a;https://github.com/yanpeng1314/Snake 1 #include "Snake.h"2 3 int iScore 0;4 int iGrade 1;5 6 //蛇头蛇尾初始位置7 int x_head 1, y_head 3;8 int x_tail 1, y_tail 1;9 10 //地图坐标11 int i_Map 1, j_Map 1;12 13 /…

远程办公招聘_招聘远程人才时要寻找的5种技能

远程办公招聘Remote work is a fast emerging segment of the labor market. How to embrace this shift as an employer - and find, recruit, and empower remote staff - is a question many companies and hiring managers are grappling with.远程工作是劳动力市场中快速崛…

10分钟腾讯云配置免费https

腾讯云免费证书申请地址&#xff1a; https://console.cloud.tencent... 填写相关信息 域名身份验证 文件验证 将fileauth.text 创建在网站访问根目录的 .well-known/pki-validation/目录使得 www.**.com/.well-known/pki-validation/fileauth.text 能够访问详情 等待5分钟左右…

1588. 所有奇数长度子数组的和

1588. 所有奇数长度子数组的和 给你一个正整数数组 arr &#xff0c;请你计算所有可能的奇数长度子数组的和。 子数组 定义为原数组中的一个连续子序列。 请你返回 arr 中 所有奇数长度子数组的和 。 示例 1&#xff1a; 输入&#xff1a;arr [1,4,2,5,3] 输出&#xff1…

洛谷P3195 [HNOI2008]玩具装箱TOY(单调队列优化DP)

题目描述 P教授要去看奥运&#xff0c;但是他舍不下他的玩具&#xff0c;于是他决定把所有的玩具运到北京。他使用自己的压缩器进行压缩&#xff0c;其可以将任意物品变成一堆&#xff0c;再放到一种特殊的一维容器中。P教授有编号为1...N的N件玩具&#xff0c;第i件玩具经过压…

680. 验证回文字符串 Ⅱ

680. 验证回文字符串 Ⅱ 给定一个非空字符串 s&#xff0c;最多删除一个字符。判断是否能成为回文字符串。 示例 1: 输入: s “aba” 输出: true 示例 2: 输入: s “abca” 输出: true 解释: 你可以删除c字符。 示例 3: 输入: s “abc” 输出: false 解题思路 使用…

Android--RxJava2更新体验

截止日前最新版2017-3-15: RxJava compile ‘io.reactivex:rxjava:1.2.7’ compile ‘io.reactivex:rxandroid:1.2.1’ RxJava2 compile “io.reactivex.rxjava2:rxjava:2.0.7” compile “io.reactivex.rxjava2:rxandroid:2.0.1” 1:create操作改变 Rxjava CompositeSubscri…

kotlin和java语言_Kotlin VS Java – 2020年您应该学习哪种编程语言?

kotlin和java语言It has been several years since Kotlin came out, and it has been doing well. Since it was created specifically to replace Java, Kotlin has naturally been compared with Java in many respects.自Kotlin问世以来已经有好几年了&#xff0c;而且一切…

oracle部署--安装oracle软件与部署单实例数据库

一、安装oracle数据库软件 1.创建相应的用户组及用户 groupadd oinstall groupadd oper groupadd dba useradd -g oinstall -G oper,dba oracle 2.创建oracle software安装路径 mkdir -p /u01/app/oracle/product/11.2.0/db_1 3.修改安装路径权限 chown -R oracle:oinstall …

web前端【第十一篇】jQuery属性相关操作

知识点总结 1、属性 属性&#xff08;如果你的选择器选出了多个对象&#xff0c;那么默认只会返回出第一个属性&#xff09;、 attr(属性名|属性值) - 一个参数是获取属性的值&#xff0c;两个参数是设置属性值 - 点击加载图片示例 re…

528. 按权重随机选择

528. 按权重随机选择 给定一个正整数数组 w &#xff0c;其中 w[i] 代表下标 i 的权重&#xff08;下标从 0 开始&#xff09;&#xff0c;请写一个函数 pickIndex &#xff0c;它可以随机地获取下标 i&#xff0c;选取下标 i 的概率与 w[i] 成正比。 例如&#xff0c;对于 w…

sql语句语法多表关联_SQL创建表语句-带有示例语法

sql语句语法多表关联SQL is one of the most reliable and straightforward querying languages around. It provides clear cut syntax that reads easily without abstracting away too much of the functionalitys meaning.SQL是最可靠&#xff0c;最直接的查询语言之一。 它…

分布式改造剧集三:Ehcache分布式改造

第三集&#xff1a;分布式Ehcache缓存改造 前言 ​ 好久没有写博客了&#xff0c;大有半途而废的趋势。忙不是借口&#xff0c;这个好习惯还是要继续坚持。前面我承诺的第一期的DIY分布式&#xff0c;是时候上终篇了---DIY分布式缓存。 探索之路 ​ 在前面的文章中&#xff0c;…

85. 最大矩形

85. 最大矩形 给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵&#xff0c;找出只包含 1 的最大矩形&#xff0c;并返回其面积。 示例 1&#xff1a; 输入&#xff1a;matrix [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”…