0%

LeetCode 89 格雷编码

题目如下:

n 位格雷码序列 是一个由 2n 个整数组成的序列,其中:

每个整数都在范围 [0,2n1] 内, 要求:

  • 第一个整数是 0
  • 一个整数在序列中出现 不超过一次
  • 每对 相邻 整数的二进制表示 恰好一位不同 ,且
  • 第一个 和 最后一个 整数的二进制表示 恰好一位不同

给你一个整数 n ,返回任一有效的 n 位格雷码序列 。

说实话我一开始想的简单了,直接暴力搜索,最后发现不行,只能 refer 一下官方题解了

方法一

我们可以用归纳法,从 n1推到n,设序列 Gnn 位的格雷码序列, 我们可以从 Gn1 推到 Gn

首先把 Gn1 中所有元素的n1位设为 1,得到Gn1T, 然后拼接 Gn1Gn1T就得到了我们想要的结果。

为什么呢?其实很简单,Gn1T 中每个数字都与Gn1 有且仅有一位不同, 且 Gn1[0,2n1]的一个排列,Gn1T则是[2n1,2n1]上的排列。 二者组合后自然就得到了[0,2n1]上的排列,且依次穿插后二进制位恰有一位不同。

方法二

这个方法是纯粹的找规律,如下: a

Gitalking ...