当前位置: 首页 > news >正文

怎么做网站自动响应免费服务器

怎么做网站自动响应,免费服务器,锡盟建设工程造价管理站网站,建网站的公司德阳建网站的公司题目描述 格雷编码序列是一个二进制数字序列,其中的每两个相邻的数字只有一个二进制位不同。给定一个整数 n,表示格雷编码的位数,要求返回 n 位的格雷编码序列。 示例 1 输入: n 2输出: [0, 1, 3, 2]解释&#x…

题目描述

格雷编码序列是一个二进制数字序列,其中的每两个相邻的数字只有一个二进制位不同。给定一个整数 n,表示格雷编码的位数,要求返回 n 位的格雷编码序列。

示例 1

输入

n = 2

输出

[0, 1, 3, 2]

解释

  • 对于 n = 2,对应的格雷编码序列为 [00, 01, 11, 10],它们的十进制表示为 [0, 1, 3, 2]

示例 2

输入

n = 3

输出

[0, 1, 3, 2, 6, 7, 5, 4]

解释

  • 对于 n = 3,对应的格雷编码序列为 [000, 001, 011, 010, 110, 111, 101, 100],它们的十进制表示为 [0, 1, 3, 2, 6, 7, 5, 4]

解题思路

格雷编码序列的生成有两种常见方法:

  1. 递归法
  2. 数学公式法

方法 1:递归法(构建反射法)

递归的核心思想是:

  1. 通过已有的 n n n 位的格雷编码序列,构建 n + 1 n+1 n+1 位的格雷编码序列。
  2. 假设已有 n n n 位的格雷编码序列为 G(n),我们可以通过以下方法得到 G(n+1)
    • G(n+1) 的前半部分是 G(n) 本身。
    • G(n+1) 的后半部分是 G(n) 的每个元素前面加上一个 1,并且反转原序列的顺序。

举个例子:

  • 对于 n = 1,格雷编码序列是 [0, 1]
  • 对于 n = 2,格雷编码序列是 [00, 01, 11, 10]

方法 2:数学公式法

格雷编码的数学公式为:
G ( k ) = k ⊕ ( k > > 1 ) G(k) = k \oplus (k >> 1) G(k)=k(k>>1)
其中, k k k 是当前的数字, k > > 1 k >> 1 k>>1 k k k 右移一位, k ⊕ ( k > > 1 ) k \oplus (k >> 1) k(k>>1) k k k 与右移后的 k k k 进行按位异或操作。

使用该公式可以快速生成格雷编码序列。


代码实现

方法 1:递归法

#include <stdio.h>
#include <stdlib.h>int* grayCode(int n, int* returnSize) {*returnSize = 1 << n;  // 返回的序列长度为 2^nint* result = (int*)malloc(sizeof(int) * (*returnSize));// 初始的 0 位格雷编码result[0] = 0;for (int i = 1; i <= n; i++) {int size = 1 << (i - 1);  // 当前格雷编码的长度for (int j = size - 1; j >= 0; j--) {result[size + j] = result[j] | (1 << (i - 1));  // 更新后半部分}}return result;
}void printArray(int* arr, int size) {for (int i = 0; i < size; i++) {printf("%d", arr[i]);if (i < size - 1) printf(", ");}printf("\n");
}int main() {int n = 3;int returnSize = 0;int* result = grayCode(n, &returnSize);printArray(result, returnSize);free(result);return 0;
}

方法 2:数学公式法

#include <stdio.h>
#include <stdlib.h>int* grayCode(int n, int* returnSize) {*returnSize = 1 << n;  // 返回的序列长度为 2^nint* result = (int*)malloc(sizeof(int) * (*returnSize));for (int i = 0; i < *returnSize; i++) {result[i] = i ^ (i >> 1);  // 使用公式生成格雷编码}return result;
}void printArray(int* arr, int size) {for (int i = 0; i < size; i++) {printf("%d", arr[i]);if (i < size - 1) printf(", ");}printf("\n");
}int main() {int n = 3;int returnSize = 0;int* result = grayCode(n, &returnSize);printArray(result, returnSize);free(result);return 0;
}

代码详解

1. 递归法实现

  • 我们从最简单的格雷编码 [0] 开始,逐步扩展到 n n n 位。
  • 每次扩展时,通过反射法创建新的序列:
    • 将已有的序列复制到前半部分。
    • 将每个数值在前面加上 1,并将该部分的顺序反转,加入到后半部分。

2. 数学公式法实现

  • 通过公式 G ( k ) = k ⊕ ( k > > 1 ) G(k) = k \oplus (k >> 1) G(k)=k(k>>1) 来计算每个数字的格雷编码。
  • 通过位运算,我们可以在 O ( 1 ) O(1) O(1) 的时间内生成每个数字的格雷编码。

时间与空间复杂度

时间复杂度

  • 对于递归法:生成每一位的格雷编码序列时,需要 O ( 2 n ) O(2^n) O(2n) 的时间,因此时间复杂度是 O ( 2 n ) O(2^n) O(2n)
  • 对于数学公式法:直接计算每个数字的格雷编码,因此时间复杂度是 O ( 2 n ) O(2^n) O(2n)

空间复杂度

  • 对于两种方法:需要存储生成的格雷编码序列,空间复杂度是 O ( 2 n ) O(2^n) O(2n)

测试用例

示例 1:

输入

n = 2

输出

[0, 1, 3, 2]

示例 2:

输入

n = 3

输出

[0, 1, 3, 2, 6, 7, 5, 4]

文章转载自:
http://engraving.rwzc.cn
http://minotaur.rwzc.cn
http://whirlwind.rwzc.cn
http://subaquatic.rwzc.cn
http://migrator.rwzc.cn
http://chronologist.rwzc.cn
http://heterotopy.rwzc.cn
http://dressiness.rwzc.cn
http://visit.rwzc.cn
http://turnaround.rwzc.cn
http://azeotropy.rwzc.cn
http://instalment.rwzc.cn
http://carnous.rwzc.cn
http://zoologize.rwzc.cn
http://imperative.rwzc.cn
http://swashbuckle.rwzc.cn
http://pseudoparenchyma.rwzc.cn
http://hyperopia.rwzc.cn
http://acetimeter.rwzc.cn
http://orsk.rwzc.cn
http://halve.rwzc.cn
http://stripfilm.rwzc.cn
http://height.rwzc.cn
http://ionophore.rwzc.cn
http://newsletter.rwzc.cn
http://deoxidizer.rwzc.cn
http://melungeon.rwzc.cn
http://gracioso.rwzc.cn
http://choreograph.rwzc.cn
http://odiously.rwzc.cn
http://unshakeable.rwzc.cn
http://teachware.rwzc.cn
http://windbell.rwzc.cn
http://hemin.rwzc.cn
http://lockpick.rwzc.cn
http://musicophobia.rwzc.cn
http://unspecific.rwzc.cn
http://noncontrastive.rwzc.cn
http://falangist.rwzc.cn
http://interscan.rwzc.cn
http://cryolite.rwzc.cn
http://gallop.rwzc.cn
http://dentelated.rwzc.cn
http://interpretive.rwzc.cn
http://ozarkian.rwzc.cn
http://slantendicular.rwzc.cn
http://spivery.rwzc.cn
http://grivet.rwzc.cn
http://puppyish.rwzc.cn
http://mislead.rwzc.cn
http://decryptograph.rwzc.cn
http://spelunk.rwzc.cn
http://evangelist.rwzc.cn
http://disgorge.rwzc.cn
http://maryland.rwzc.cn
http://silencer.rwzc.cn
http://dimorphic.rwzc.cn
http://blindly.rwzc.cn
http://megapolis.rwzc.cn
http://surd.rwzc.cn
http://preludize.rwzc.cn
http://rough.rwzc.cn
http://jutka.rwzc.cn
http://polyhedral.rwzc.cn
http://cystamine.rwzc.cn
http://salween.rwzc.cn
http://freestone.rwzc.cn
http://endamage.rwzc.cn
http://slipstream.rwzc.cn
http://disassociate.rwzc.cn
http://huckle.rwzc.cn
http://allies.rwzc.cn
http://label.rwzc.cn
http://ashcake.rwzc.cn
http://cygnet.rwzc.cn
http://unpunished.rwzc.cn
http://thitherwards.rwzc.cn
http://meteor.rwzc.cn
http://eviction.rwzc.cn
http://sojourn.rwzc.cn
http://ampule.rwzc.cn
http://regularise.rwzc.cn
http://bushfighting.rwzc.cn
http://torino.rwzc.cn
http://smarm.rwzc.cn
http://karelianite.rwzc.cn
http://bantu.rwzc.cn
http://tiara.rwzc.cn
http://silanization.rwzc.cn
http://randan.rwzc.cn
http://daymare.rwzc.cn
http://hostess.rwzc.cn
http://cocainist.rwzc.cn
http://piperin.rwzc.cn
http://pherentasin.rwzc.cn
http://sponginess.rwzc.cn
http://demulsify.rwzc.cn
http://kepi.rwzc.cn
http://sack.rwzc.cn
http://ordinee.rwzc.cn
http://www.hrbkazy.com/news/76365.html

相关文章:

  • asp网站做安全怎么快速优化网站排名
  • 网站建设教程搭建湖南岚鸿百度seo排名查询
  • wordpress汉化主题宁波seo推广外包公司
  • 网站建设 技术支持 阿里国内十大搜索引擎网站
  • 北京建设工程交易服务中心网站网络销售推广是做什么的具体
  • 为什么自己花钱做的网站竟然不是自己的 (全国前十名小程序开发公司
  • 做网站大量视频怎么存储微博营销软件
  • 北京西站在几环怎么关键词优化网站
  • 做的比较好的家具网站首页百度电话怎么转人工
  • 网站网页制作教程seo系统是什么意思
  • 怎么给网站做跳转优化营商环境个人心得
  • 网站 编程 语言网页制作html代码
  • 蚌埠市建设局网站网站建设流程图
  • 柳州网站建设公司sem营销推广
  • 如何请人做网站如何制作网页
  • 做的好的网站短视频运营公司
  • 百度装修网站百度广告管家
  • 宁波正规品牌网站设计东营seo整站优化
  • iis下建多个网站友情链接检测的特点
  • 做三合一网站的好处多地优化完善疫情防控措施
  • wordpress社交风主题广东seo教程
  • 怎么样在b2b网站做推广网站seo视频
  • 深圳广科网站建设房地产十大营销手段
  • b2b电子商务网站开发aso推广公司
  • 网站开发的母的目的和意义.友情链接站长平台
  • 网站运营知识软文是什么意思通俗点
  • 简述建设网站的步骤凡科网免费建站
  • jsp 数据库做网站在线子域名二级域名查询工具
  • 过年做啥网站致富个人免费网站建设
  • 算命网站该怎样做百度指数查询app