89. 格雷编码

news2025/1/11 11:50:48

解题思路:

解法一:找规律,2-4位格雷码的码表如下图所示(二进制表示):

可以发现,n位格雷码序列可以由n-1位格雷码序列得到,满足递归规则,具体构造规则如下:

  1. 1位格雷码有两个码字:0,1。n=1时,递归终止。
  2. n位格雷码序列中的前2^n个码字等于n-1位格雷码的码字,按顺序书写,加前缀0
  3. n位格雷码序列中的后2^n个码字等于n-1位格雷码的码字,按逆序书写,加前缀1
  4. 即:n位格雷码的序列集合 = n-1位格雷码集合(顺序)加前缀0 + n-1位格雷码集合(逆序)加前缀1

通过上述递归求解出n位格雷码中每一个码字的二进制序列,然后将该二进制序列转为十进制,即所求

AC代码:

class Solution {
    public static List<Integer> grayCode(int n) {
        List<String> result = binGrayCode(n);
        List<Integer> ans = new ArrayList<>();
        for (String str : result) {
            int num = Integer.parseInt(str, 2);
            ans.add(num);
        }
        return ans;
    }

    public static List<String> binGrayCode(int n){
        ArrayList<String> result = new ArrayList<>();
        if (n==1){
            result.add("0");
            result.add("1");
            return result;
        }
        List<String> ans = binGrayCode(n - 1);
        for (String an : ans) {
            result.add("0" + an);
        }
        for (int i = ans.size()-1; i >=0; i--) {
            result.add("1"+ans.get(i));
        }

        return result;
    }
}

方法二:公式法:

第i个格雷码等于:

g_{i}=i\bigoplus \left \lfloor \frac{i}{2}\right \rfloor  

即 i 与 i/2向下取整的异或值

AC代码:

class Solution {
    public static List<Integer> grayCode(int n) {
        ArrayList<Integer> result = new ArrayList<>();
        for (int i = 0; i < 1 << n; i++) {
            result.add(i ^ (i >> 1));
        }
        return result;
    }
}

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

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

相关文章

golang 通过案列感受下内存分析

package main // 声音文件所在的包&#xff0c;每个go文件必须有归属的包 import ("fmt" )// 引入程序中需要用的包&#xff0c;为了使用包下的函数&#xff0c;比如&#xff1a;Printinfunc exchangeNum(num1 int, num2 int){var t intt num1num1 num2num2 t }…

stc8H驱动并控制三相无刷电机综合项目技术资料综合篇

stc8H驱动并控制三相无刷电机综合项目技术资料综合篇 🌿相关项目介绍《基于stc8H驱动三相无刷电机开源项目技术专题概要》 🔨停机状态,才能进入设置状态,可以设置调速模式,以及转动方向。 ✨所有的功能基本已经完成调试,目前所想到的功能基本已经都添加和实现。引脚利…

【云原生】聊聊为什么需要docker以及其基础架构

为什么需要docker 在没有docker之前&#xff0c;我们开发、测试、生产其实是根据不同的服务器进行配置的&#xff0c;很可能因为软件配置不同而导致的生产事故&#xff0c;那么如果能较好的解决软件和配置等封装成一个可运行的软件&#xff0c;无需关注配置&#xff0c;那么是…

<十三>objectARX开发:模拟实现CAD的移动Move命令

一、目的 实现类似于CAD的移动命令,选择对象,移动到指定位置,移动过程中对象跟随鼠标移动。效果如下: 二、关键步骤 选择对象,打开实体判断类型:acedEntSel()、acdbOpenObject()、isKindOf()。指定基点:acedGetPoint()。移动模型,追踪光标移动对象实体:acedGrRead()…

gitee生成公钥和远程仓库与本地仓库使用验证

参考文档&#xff1a; https://help.gitee.com/base/account/SSH%E5%85%AC%E9%92%A5%E8%AE%BE%E7%BD%AE(1)通过命令ssh-keygen 生成SSH key -t key类型 -c注释 ssh-keygen -t ed25519 -C "Gitee SSH Key" (2)按三次回车 (3)查看生成的 SSH 公钥和私钥&#xff1a; …

SOLIDWORKS Simulation:优化设计的利器

SOLIDWORKS Simulation是SOLIDWORKS软件家族中的一员&#xff0c;是一款强大的工程仿真分析工具。它通过模拟和分析&#xff0c;帮助工程师们更好地理解和评估设计方案的性能&#xff0c;并通过优化设计来提高产品质量和效率。这篇文章我们将介绍SOLIDWORKS Simulation的特点、…

Android问题笔记 - kotlin中使用Java接口,报错Parameter specified as non-null is null 快速解决

点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册点击跳转>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&…

机器学习西瓜书+南瓜书吃瓜教程学习笔记第五章神经网络

来自吃瓜教程】《机器学习公式详解》&#xff08;南瓜书&#xff09;与西瓜书公式推导直播合集第五章神经网络 和周志华老师的机器学习西瓜书 以下是我的学习笔记&#xff1a; 神经网络&#xff1a; 神经网络是由具有适应性的简单单元组成的广泛并行互联的网络&#xff0c;它的…

MySQL常用日期查询统计总结

MySQL常用日期统计总结 一、准备工作 表结构如下&#xff1a; CREATE TABLE order_info (id int NOT NULL AUTO_INCREMENT,info varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,time datetime NULL DEFAULT NULL,PRIMARY KEY (id) USING BTRE…

联想电脑打开exe提示要在Microsoft Store中搜索应用

问题&#xff1a; 你需要为此任务安装应用。 是否要在Microsoft Store中搜索一个&#xff1f; 如图&#xff1a; 出现此情况&#xff0c;仅需要做如下操作&#xff0c;在要打开的exe文件上右键&#xff0c;属性&#xff1a; 如图箭头所示&#xff0c;点击“解除锁定”出现对钩&…

【软件设计师-从小白到大牛】上午题基础篇:第二章 操作系统

文章目录 前言章节提要一、进程管理1、进程的状态2、前趋图3、进程的同步与互斥4、PV操作6、PV操作与前趋图7、死锁问题进程资源图&#xff08;补充&#xff09;真题链接 二、存储管理1、分区存储组织2、页式存储组织3、段式存储组织4、段页式存储组织5、快表6、页面置换算法单…

linux 约束

linux 约束 1、约束的概念1.1什么是约束1.2约束的优劣势 2、约束的作用3、约束的分类4、约束的应用场景5、约束的管理5.1创建5.2查看5.3插入5.4删除 6、总结 1、约束的概念 1.1什么是约束 在关系型数据库中&#xff0c;约束是用于限制表中数据规则的一种机制。它可以确保表中…

第一百五十三回 如何实现滑动窗口

文章目录 概念介绍实现方法示例代码 我们在上一章回中介绍了自定义组件实现游戏摇杆相关的内容&#xff0c;本章回中将介绍 如何实现滑动窗口.闲话休提&#xff0c;让我们一起Talk Flutter吧。 概念介绍 我们在本章回中介绍的滑动窗口表示在屏幕底部向上滑动时弹出一个窗口&a…

数量关系(刘文超)

解题技巧 代入排除法 数字特性法 整除特性 比例倍数特性&#xff08;找比例&#xff0c;比例不明显时找等式&#xff09; 看不懂式子时&#xff0c;把所有的信息像表格一样列出来 看不懂式子时&#xff0c;把所有的信息像表格一样列出来

智慧公厕是提升公共厕所管理服务能力的创新举措

在城市化进程加速的今天&#xff0c;公共厕所的管理问题成为让人头疼的难题。随着智慧科技的发展&#xff0c;智慧公厕应运而生&#xff0c;为提升公共厕所综合管理服务能力提供了新思路和解决方案。本文将以智慧公厕领先厂家广州中期科技有限公司&#xff0c;大量精品案例项目…

基于STM32和LORA组网的养老院智能控制系统设计(第十八届研电赛)

一、整体功能 数据采集从机1采集烟雾浓度&#xff0c;PM2.5浓度&#xff0c;甲醛浓度&#xff1b;从机2采集温湿度&#xff0c;光照强度&#xff0c;噪声强度&#xff0c;老人体感温度&#xff1b;从机3收集厨房饮用水的TDS值。3个数据采集从机将采集到的数据显示在本地OLED屏…

idea2023.2.2修改代码区中文字体

使用idea编译代码时&#xff0c;中文默认使用宋体进行显示&#xff0c;可通过以下方式进行修改。 Editor -> Font -> Fallback font

“微信小号”注册攻略!无需绑定手机号也能注册一个新微信

微信作为移动互联时代最重要的App之一&#xff0c;绝大多数人的生活、工作都离不开它。 随着软件普及率的增加&#xff0c;不少人苦恼于工作、生活都在一个微信号上。因此&#xff0c;不少用户会选择注册用于工作和生活的两个单独微信账号来使用。 然而&#xff0c;此前一个手机…

Spring Cloud阿里的nacos注册中心的使用以及Feign远程调用

原文档 https://github.com/alibaba/spring-cloud-alibaba/blob/2022.x/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/readme-zh.md 注册中心nacos使用步骤 添加依赖 <!-- 服务注册/发现--><dependency><groupId>com.al…