力扣-89. 格雷编码

简介: n 位格雷码序列 是一个由 2n 个整数组成的序列,其中:每个整数都在范围 [0, 2n - 1] 内(含 0 和 2n - 1)第一个整数是 0一个整数在序列中出现 不超过一次每对 相邻 整数的二进制表示 恰好一位不同 ,且第一个 和 最后一个 整数的二进制表示 恰好一位不同给你一个整数 n ,返回任一有效的 n 位格雷码序列 。

n 位格雷码序列 是一个由 2n 个整数组成的序列,其中:
每个整数都在范围 [0, 2n - 1] 内(含 0 和 2n - 1)
第一个整数是 0
一个整数在序列中出现 不超过一次
每对 相邻 整数的二进制表示 恰好一位不同 ,且
第一个 和 最后一个 整数的二进制表示 恰好一位不同
给你一个整数 n ,返回任一有效的 n 位格雷码序列 。

方法1:

#include <vector>
using namespace std;
int main()
{
    int n;
    cin>>n;
    vector<int> res;
    res.reserve(1 << n);  //<<左移,reserve给res开辟空间,但是此时size()还是为0
    res.push_back(0);   //添加元素到最后一个
    for(int i = 1; i <= n; i++){
        int len = res.size();
        for(int j = len - 1; j >= 0; j--){
            res.push_back(res[j] | (1 << i-1));  //|或运算,这里就是下面在首位加1
        }
    }
    for(int i = 0; i < res.size(); i++){
        cout<< res[i];
    }
return 0;

方法2:

#include <vector>
using namespace std;
int main()
{
  vector<int> ret(1 << n);    //直接开辟空间,与第一种方法不同,此时size()为2^n
    for (int i = 0; i < ret.size(); i++) {
        ret[i] = (i >> 1) ^ i;    //^异或操作
    }
    for(int i = 0; i < res.size(); i++){
        cout<< res[i];
    }
    return 0;
}

方法一:
图片.png

人话解释
图片.png

方法二:
方法二实际上是定义解法,000是第一位,001第二位,011是第三位,010是第四位…
这些都是当前所在位右移一位然后与当前所在位做异或操作

目录
相关文章
|
存储 数据可视化 C语言
C 语言数组教程:定义、访问、修改、循环遍历及多维数组解析
数组用于将多个值存储在单个变量中,而不是为每个值声明单独的变量。 要创建数组,请定义数据类型(例如 int)并指定数组名称,后面跟着方括号 []。 要将值插入其中,请使用逗号分隔的列表,并在花括号内使用
1306 0
|
11月前
|
人工智能 前端开发 数据可视化
2024年低代码趋势洞察——企业最看重的功能有哪些
随着数字化转型加速,低代码平台从“可选”变为企业技术战略的“必需品”。预计2024年全球超70%企业将引入低代码工具,以应对市场需求和技术挑战。低代码平台通过可视化开发、五大核心引擎(SQL、功能、模板、图表、切面引擎)、模型驱动开发、高效数据处理、AI智能助力及灵活插件生态,大幅简化开发流程,提升效率和质量,降低开发门槛,支持多行业复杂业务需求。其强大的技术架构和企业级特性,如微服务架构、开源支持、数据增删改查、图表创建等,进一步增强了企业的运营效率和决策能力。未来,低代码平台将更深度融合AI、数据分析和云原生架构,推动企业数字化创新。
293 21
|
JavaScript 前端开发 API
探索后端技术:Node.js的优势和实际应用
【10月更文挑战第6天】 在当今数字化时代,后端开发是任何成功软件应用的关键组成部分。本文将深入探讨一种流行的后端技术——Node.js,通过分析其核心优势和实际应用案例,揭示其在现代软件开发中的重要性和潜力。
654 2
|
7月前
|
人工智能 前端开发 Java
AI大模型进阶系列(02)基于Spring AI实现AI chatbot助理|一句话让deepseek实现
本文介绍了通过DeepSeek生成一个基于Spring AI的在线AI聊天助手项目的全过程。项目采用JDK17+Spring AI+Thymeleaf+Spring Web技术栈,实现了一个简单的聊天界面,用户可输入内容并获得DeepSeek返回的结果。文章详细描述了从需求明确、项目结构设计到配置参数启动的步骤,并展示了核心代码片段如pom.xml、application.properties及主要Java类文件。尽管功能简单,但体现了AI在编程领域的高效应用,未来有望进一步优化上下文记忆等功能,提升开发体验与效率。
|
存储 缓存 算法
CPU优化
【10月更文挑战第7天】
484 1
|
机器学习/深度学习 人工智能 JSON
微信小程序原生AI运动(动作)检测识别解决方案
近年来,疫情限制了人们的出行,却推动了“AI运动”概念的兴起。AI运动已在运动锻炼、体育教学、线上主题活动等多个场景中广泛应用,受到互联网用户的欢迎。通过AI技术,用户可以在家中进行有效锻炼,学校也能远程监督学生的体育活动,同时,云上健身活动形式多样,适合单位组织。该方案成本低、易于集成和扩展,已成功应用于微信小程序。
|
监控 Devops Docker
如何在DevOps中更好地使用python
如何在DevOps中更好地使用python
394 7
|
Java 测试技术 Maven
成功解决:nested exception is java.lang.NoClassDefFoundError: org/springframework/aop/TargetSource
这篇文章介绍了解决Spring框架中出现的`java.lang.NoClassDefFoundError: org/springframework/aop/TargetSource`错误的步骤,指出错误原因是缺少`spring-aop`模块的jar包,并提供了通过Maven依赖或手动添加jar包到项目中的方法来解决这个问题。
成功解决:nested exception is java.lang.NoClassDefFoundError: org/springframework/aop/TargetSource
|
jenkins 测试技术 持续交付
30个接口自动化测试面试题,赶紧收藏
接口自动化测试是使用工具验证接口功能、性能和安全性的自动化过程。它能提升测试效率,减少人工工作量,及时发现问题。常见工具包括Postman、SoapUI和JMeter。测试涉及需求分析、测试计划、用例设计、脚本编写、执行、报告生成及问题跟踪。测试用例涵盖输入数据、预期结果等,脚本包含请求和响应细节。断言验证接口正确性,数据驱动测试使用多数据验证,性能测试检查响应时间等,安全测试关注认证和加密,Mock测试模拟数据,集成测试验证接口交互,回归测试确保修改未破坏原有功能,异常处理确保测试稳定性,并发和压力测试检查系统负载,持续集成通过工具如Jenkins保证软件质量。
759 3
|
供应链 物联网 区块链
新技术趋势与应用:探讨区块链、物联网与虚拟现实的未来发展
本文深入探讨了区块链、物联网和虚拟现实这三大新兴技术在现代社会中的应用前景。通过分析这些技术的发展趋势,我们可以预见它们将如何改变我们的生活方式、商业模式以及社会结构。文章从多个角度出发,结合具体案例,展示了这些技术在实际应用中的潜力和挑战。