LeetCode题解:1238. 循环码排列,归纳法,详细注释
原题链接:
https://leetcode.cn/problems/circular-permutation-in-binary-representation/
前置条件:
- 在解题之前,请先一定要阅读89.格雷编码的题解
- 格雷编码可以满足题目的条件“
p[i]和p[i+1]的二进制表示形式只有一位不同”,以及“p[0]和p[2^n -1]的二进制表示形式也只有一位不同” - 我们需要将格雷编码转换成以
start开头的一串编码即可 - 为何要用异或:
- 格雷编码的第一个是
0,可以得知0 ^ start = start - 回顾一下异或操作,可以知道如果对每一位都进行异或操作,每一位之间的逻辑关系的变化是同步的
- 也就是说,
p[i]和p[i+1]的相互关系,以及p[0]和p[2^n -1]的相互关系不会改变
a | b | a XOR b
—|—|---------
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 0
- 格雷编码的第一个是
解法一:两次循环:
- 按照89.格雷编码的方法求出格雷编码
- 将格雷编码的每一位都按位异或
start,即可求得结果
/*** @param {number} n* @param {number} start* @return {number[]}*/
var circularPermutation = function (n, start) {/* * 第一步,先求格雷编码*/let result = [0] // 存储结果,第一个整数为0// 一共计算n位格雷码序列,需要循环n次for (let i = 0; i < n; i++) {// 每次计算时,已有的序列不变// 只需要计算已有序列的逆序列,每个再加前缀1// 需要缓存已有序列的长度,用于计算下一段序列const len = result.length// 由于是逆序计算,因此要从len - 1开始加前缀for (let j = len - 1; j >= 0; j--) {// 加前缀1后,把新值存入结果result.push(result[j] | (1 << i))}}/* * 第二步,将格雷编码的每一项都按位异或start*/for (let i = 0; i < result.length; i++) {result[i] ^= start}return result
}
解法二:
- 可以在解法一的基础上,将第二步的异或操作,放到第一步的第二层循环中,具体方法如下:
- 每次查找
result中的元素时,将其异或start,将其转为格雷编码 - 给格雷编码加上前缀
1 - 存入
result时,将其异或start,转为以start开头的编码
- 每次查找
/*** @param {number} n* @param {number} start* @return {number[]}*/
var circularPermutation = function (n, start) {let result = [start] // // 存储结果,第一个整数为start// 一共计算n位编码,需要循环n次for (let i = 0; i < n; i++) {// 每次计算时,已有的序列不变// 只需要计算已有序列的逆序列,每个再加前缀1// 需要缓存已有序列的长度,用于计算下一段序列const len = result.length// 由于是逆序计算,因此要从len - 1开始加前缀for (let j = len - 1; j >= 0; j--) {// 加前缀1后,把新值存入结果result.push(// 将编码异或start,转为格雷编码((result[j] ^ start) |// 为格雷编码加上前缀1(1 << i)) ^// 将格雷编码异或start,转为以start开头的编码start)}}return result
}
相关文章:
LeetCode题解:1238. 循环码排列,归纳法,详细注释
原题链接: https://leetcode.cn/problems/circular-permutation-in-binary-representation/ 前置条件: 在解题之前,请先一定要阅读89.格雷编码的题解格雷编码可以满足题目的条件“p[i] 和 p[i1] 的二进制表示形式只有一位不同”,…...
全新后门文件Nev-3.exe分析
一、 样本发现: 蜜罐 二、 内容简介: 通过公司的蜜罐告警发现一个Nev-3.exe可执行文件文件,对该样本文件进行分析发现,该可执行程序执行后会从远程服务器http://194.146.84.2:4395/下载一个名为“3”的压缩包,解压后…...
线性回归系数解释
线性回归系数解释线性回归系数1、R2R^2R2(R方,R-Square)2、Adj−R2Adj-R^2Adj−R2(调整后的 R 方)3、标准误差4、FFF 值5、FFF 显著度6、置信区间7、PPP 值线性回归系数 回归模型得到后会有多个系数,这些系…...
22.2.27打卡 Codeforces Round #852 (Div. 2) A~D
A Yet Another Promotion 题面翻译 题目描述 共 ttt 组数据,每组数据中,你需要买 nnn 公斤苹果,第一天单价为 aaa ,但每买 mmm 公斤赠送一公斤;第二天单价为 bbb 。求最小花费。 输入输出格式 第一行一个正整数 …...
如何查看Spring Boot各版本的变化
目录 1.版本 2.基础特性和使用 3.新增特性和Bug修复 1.版本 打开Spring官网,点进Spring Boot项目我们会发现在不同版本后面会跟着不同的标签: 这些标签对应不同的版本,其意思如下: GA正式版本,通常意味着该版本已…...
程序员是否要加入创业公司?
我从1月份入职到2月份离职,历时一个半月。短暂的体验了一段创业生活,更准确的说是一段“待在”创业团队的生活,因为我发现创业本身跟我关系不大。一个半月的就业经历,对任何人来说都不是一个好选择,当然也不是我所期望…...
2023软件测试工程师全新技术栈,吃透这些,起薪就是25k~
相信每个准备软件测试面试的同学,不管你是大学刚毕业,满心憧憬着进入公司实习、非计算机行业转行软件测试、自学测试就业还是培训后就业,都会面临着众多的疑问和不解,那就是该怎么走出着第一步,今天本文一次性告诉你&a…...
【ChatGPT情商大考验】ChatGPT教我谈恋爱
❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…...
C++类内存结构模型
内存分区 内存全局数据区,代码区,栈区,堆区。 定义一个类 类的成员函数被放在代码区 类的静态成员变量被放在全局数据区(不占用类的存储空间) 非静态成员在类的实例内,实例在栈区或者堆区 虚函数指针&…...
HTML#4超链接标签,列表标签,表格标签和布局标签
一. 超链接标签介绍<a> 定义超链接,用于连接到另一个资源herf: 指定访问资源的URLtarget: 指定打开资源的方式代码<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>超链接标签</title> <…...
本科课程【数字图像处理】实验汇总
文章目录 实验1 - 腐蚀与膨胀实验2 - 图像增强实验3 - 图像的几何变换实验4 - 图像的蒙纱效果实验5 - 空洞填充实验6 - 取阈值的邻域平均算法实验7 - 图像的平移与伸缩变换实验1 - 腐蚀与膨胀 实验目的 分析掌握腐蚀与膨胀的基本原理,编写腐蚀与膨胀的算法,并掌握开闭运算的规…...
nginx安装lua、jwt模块,通过lua验证jwt实现蓝绿发布样例
文章目录前言一、基础组件下载二、组件安装1.luajit安装2.lua-nginx-module安装3.lua-resty-core安装4.lua-resty-lrucache安装5.ngx_devel_kit安装6.nginx加载lua模块7.lua-cjson安装8.lua-resty-string安装9.lua-resty-jwt安装10.lua-resty-hmac安装三、验证jwt中属性实现蓝绿…...
【redis的几种数据结构及在Java里的应用案例】
Redis是一款高性能的key-value存储系统,支持多种数据结构,包括字符串、列表、哈希表、集合和有序集合等。下面是Redis的几种数据结构及在Java中的应用案例: string 字符串(String) 字符串是Redis中最基本的数据类型,用于存储字符…...
【mybatis】 01- mybatis快速入门
数据库创建(注意:最好先创建好数据库设置utf8再进行表创建) create database mybatis; use mybatis;drop table if exists tb_user;create table tb_user(id int primary key auto_increment,username varchar(20),password varchar(20),gender char(1),addr varch…...
【C语言每日一题】杨氏矩阵(源码以及改进源码)
【C语言每日一题】—— 杨氏矩阵😎😎😎 目录 💡前言🌞: 💛杨氏矩阵题目💛 💪 解题思路的分享💪 😊题目源码的分享😊 Ǵ…...
JavaScript 面向对象【快速掌握知识点】
目录 类和对象 属性和方法 继承 多态 封装 类和对象 类是用于定义对象的模板或蓝图;它包含对象的属性和方法,我们可以使用class关键字来定义类。 class Person {constructor(name, age) {this.name name;this.age age;}sayHello() {console.log(H…...
Qt——自定义Model
众所周知,Qt提供了一套Model/View框架供开发者使用,Model用来提供数据, View则用来提供视觉层的显示。实际上这是一套遵循MVC设计模式的GUI框架,因为Qt还提供了默认的Delegate作为Controller来作为控制器。 MVC的好处这里就不多说…...
用 .NET 启动你的 DJI Ryze Tello 无人机
大疆的 DJI Ryze Tello 是入门级的无人机,不仅在 STEM 教育中有非常广泛的应用,也可以作为编程入门的首选。通过 UDP 协议调用 DJI Ryze Tello SDK 可以让 DJI Ryze Tello 无人机执行起飞,降落,转向以及不同的花式动作。本文将会通…...
sed 功能详解
介绍sedsed是一种流编辑器,它一次处理一行内容,把当前处理的行存储在临时缓冲区中(buffer),称为"模式空间",接着sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕&#…...
整数二分思路详解
题目描述 给定一个按照升序排列的长度为n的整数数组,以及 q 个查询。 对于每个查询,返回一个元素k的起始位置和终止位置(位置从0开始计数)。 如果数组中不存在该元素,则返回“-1 -1”。 输入格式 第一行包含整数n和q&a…...
手把手教你用ST-LINK给STM32F0的外挂Flash(GD25Q32)烧录字库图片
手把手教你用ST-LINK给STM32F0的外挂Flash(GD25Q32)烧录字库图片 在嵌入式开发中,TFT显示屏的应用越来越广泛,而字库和图片资源的存储往往成为项目开发的瓶颈。对于STM32F0系列单片机来说,内部Flash容量有限ÿ…...
2026年株洲老人小孩都能用专业床垫有哪些?
引言随着生活水平的提高,人们对床垫的要求也越来越高。特别是对于老人和小孩这两类特殊人群,选择一款合适的床垫尤为重要。本文将介绍几款适合老人和小孩使用的专业床垫,其中包括德国美得丽(Musterring)床垫。德国美得…...
终极指南:使用boardgame.io在React Native中开发跨平台棋盘游戏的完整教程
终极指南:使用boardgame.io在React Native中开发跨平台棋盘游戏的完整教程 【免费下载链接】boardgame.io State Management and Multiplayer Networking for Turn-Based Games 项目地址: https://gitcode.com/gh_mirrors/bo/boardgame.io 想要在移动设备上创…...
用STM32F103和DHT11做个智能温湿度报警器,附ESP8266远程监控代码
STM32F103与DHT11打造智能环境监测系统:从本地报警到云端监控全解析 在智能家居和工业物联网快速发展的今天,环境监测系统已成为许多创客和开发者入门的首选项目。本文将带你用STM32F103微控制器和DHT11温湿度传感器,构建一个功能完善的智能…...
基于Matrix的AI助手baibot:多模型集成与隐私优先部署指南
1. 项目概述:一个为Matrix而生的全能AI助手如果你和我一样,既是Matrix去中心化通信的忠实用户,又对当前各种AI大模型的能力感到兴奋,那么你很可能一直在寻找一个能将两者无缝结合的工具。市面上确实有一些方案,比如基于…...
【信息科学与工程学】计算机科学与自动化——第一百五十一篇 云计算操作系统函数说明02
威胁情报与狩猎模块(361-370) 编号 模块/组件类型 模块中的函数名称和函数的参数列表和函数的实现方式 函数的详细功能和计算机科学的所有性能【含参数列表】和功能说明 关联的其他函数【含上下文关系】 和对应模块【含上下文关系】 关联的软件/硬件核心知识点【需要涵…...
Arm物联网战略转型:从IP授权到端到端生态构建的机遇与挑战
1. 从IP供应商到生态构建者:Arm的物联网战略转型解析最近在梳理半导体行业动态时,Arm的一则旧闻让我思考了很久。2018年,这家以处理器IP授权闻名的公司,被曝出计划以6亿美元收购数据分析公司Treasure Data。这并非孤例,…...
使用Hermes Agent框架时接入Taotoken自定义供应商的步骤详解
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用Hermes Agent框架时接入Taotoken自定义供应商的步骤详解 对于使用Hermes Agent框架的开发者而言,将后端AI服务接入…...
Cursor AI代码助手:重塑IDE开发体验,从智能补全到项目级协作
1. 项目概述:当AI代码助手遇上IDE,Cursor如何重塑开发体验 如果你是一名开发者,最近一定在圈子里频繁听到“Cursor”这个名字。它不是一个全新的编程语言,也不是一个颠覆性的框架,但它却实实在在地在改变着许多人的编码…...
魔兽争霸III终极优化指南:WarcraftHelper让你的游戏体验焕然一新
魔兽争霸III终极优化指南:WarcraftHelper让你的游戏体验焕然一新 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper WarcraftHelper是一款专为…...
