LeetCode 力扣 89. 格雷编码
题目描述(中等难度) 生成 n 位格雷码,所谓格雷码,就是连续的两个数字,只有一个 bit 位不同。 解法一 动态规划 按照动态规划或者说递归的思路去想,也就是解决了小问题,怎么解决大问题。 我们假设我们有了 n = 2 的解,然后考虑怎么得到 n = 3 的解。 n = 2 的解 00 - 0 10 - 2 11 - 3 01 - 1 如果再增加一位,无非是在最高位增加 0 或者 1,考虑先增加 0。由于加的是 0,其实数值并没有变化。 n = 3 的解,最高位是 0 000 - 0 010 - 2 011 - 3 001 - 1 再考虑增加 1,在 n = 2 的解基础上在最高位把 1 丢过去? n = 3 的解 000 - 0 010 - 2 011 - 3 001 - 1 -- -- -- -- -- -- - 下面的是新增的 100 - 4 110 - 6 111 - 7 101 - 5 似乎没这么简单哈哈,第 4 行 001 和新增的第 5 行 100,有 3 个 bit 位不同了,当然不可以了。怎么解决呢? 很简单,第 5 行新增的数据最高位由之前的第 4 行的 0 变成了 1,所以其它位就不要变化了,直接把第 4 行的其它位拉过来,也就是 101。 接下来,为了使得第 6 行和第 5 行只有一位不同,由于第 5 行拉的第 4 行的低位,而第 4 行和第 3