@xiaofeifeiovo 在 leetcode刷题日常:耗费2个小时,拼尽全力,战胜5%的用户 中发帖

leetcode刷题日常:耗费2个小时,拼尽全力,战胜5%的用户
如图
[image]
[image]
实际上大部分的时间都是在尝试看懂题目和思考思路,想通之后,代码十分钟就写完了。
这里很明显,t位格雷码序列就是t位二进制数的所有可能表示。问题在于如何放置这些二进制数。在逐个生成这个思路碰壁一段时间后,自然想到了递归调用和数学归纳法。于是有了下面的思路:
假设我们已经有了一个t位的格雷码序列l(方便起见,我们将其中的每一个数视作二进制表示)。为了获得t + 1位的格雷码序列,我们只需要:

将l这个列表进行反转,得到l’ = l[::-1]
对于l中的每一个数,在最前面加一个0.
对于l’中的每一个数,在最前面加上一个1.
将l 和l’合并,得到res= l + l’

简要的证明:

res的前半部分,后半部分内部,相邻两个数的第一位相同,除去第一位的后缀只有一位不同(...