89. 格雷编码

Posted Debroon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了89. 格雷编码相关的知识,希望对你有一定的参考价值。

89. 格雷编码

 


题目

传送门:https://leetcode.cn/problems/gray-code/


 


数学公式

int gray(int n)       // 计算第n位格雷码公式
	return n ^ (n >> 1);

然后你写一个for循环,计算从1到n的所有格雷码,添加到答案数组。

 


动态规划

算例给了 n=2 的解,有了 n = 2 的解,推导怎么得到 n = 3 的解。

n = 2,值范围是 0-3

n = 3,值范围是 0-7

差了一个 2²(4)

4 的二进制是 100

n = 2 算例答案:00 01 11 10(0-1-3-2)

换成n=3范围,都加上 100

变成 100 101 111 110(4-5-7-6)

000 001 011 010
(0-1-3-2)

100 101 111 110
(4-5-7-6)

每个序列都保证了相邻数的二进制一位不同

我们现在把俩个序列拼接,就是 n = 3 的格雷码

序列是符合要求的,唯一不同就是拼接地方不同,序列1最后010和序列2开头100有俩位不同

只变化1位就是倒序拼接,因为2和6不同就是加了4,二进制上也就是多了一个1(第1位加1)

n=4,5,6 原问题 = n-1的子问题 + 2^(n-1) + 倒序拼接

 


回溯

回溯思路,你看这链接的图。

以上是关于89. 格雷编码的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode 89.格雷编码

[LeetCode] 89. 格雷编码

leetcode-89-格雷编码

Leetcode No.89 格雷编码(DFS)

Leetcode No.89 格雷编码(DFS)

leetcode 每日一题 89. 格雷编码