LeetCode 89 格雷编码 Posted on 2023-09-15 In LeetCode 题目如下: n 位格雷码序列 是一个由 2n 个整数组成的序列,其中: 每个整数都在范围 [0,2n−1] 内, 要求: 第一个整数是 0 一个整数在序列中出现 不超过一次 每对 相邻 整数的二进制表示 恰好一位不同 ,且 第一个 和 最后一个 整数的二进制表示 恰好一位不同 给你一个整数 n ,返回任一有效的 n 位格雷码序列 。 说实话我一开始想的简单了,直接暴力搜索,最后发现不行,只能 refer 一下官方题解了 方法一 我们可以用归纳法,从 n−1推到n,设序列 Gn 为n 位的格雷码序列, 我们可以从 Gn−1 推到 Gn。 首先把 Gn−1 中所有元素的n−1位设为 1,得到Gn−1T, 然后拼接 Gn−1和Gn−1T就得到了我们想要的结果。 为什么呢?其实很简单,Gn−1T 中每个数字都与Gn−1 有且仅有一位不同, 且 Gn−1是[0,2n−1]的一个排列,Gn−1T则是[2n−1,2n−1]上的排列。 二者组合后自然就得到了[0,2n−1]上的排列,且依次穿插后二进制位恰有一位不同。 方法二 这个方法是纯粹的找规律,如下:
Gitalking ...