89. 格雷编码

链接

题目.

难度:

middle

解答:

最重要的是想到分成子问题,由n-1的结果推导n的结果,结社n-1的a1…an-1是有序的,那么n的解决方案就是a1…an-1 + 1an-1…1a1

package main

import "fmt"

func grayCode(n int) []int {
	if n == 0 {
		return []int{0}
	}

	result := make([]int, 1<<uint(n))
	sub := grayCode(n - 1)
	leftPart := result[:1<<uint(n-1)]
	rightPart := result[1<<uint(n-1):]

	copy(leftPart, sub)
	for i, j := 0, len(sub)-1; i < len(sub); i, j = i+1, j-1 {
		rightPart[j] = sub[i] | 1<<uint(n-1)
	}

	return result
}
func main() {
	fmt.Println(grayCode(2))
}

复杂度分析

time

O(n**2)

space

O(n)

执行结果

执行用时 :
0 ms
, 在所有 Go 提交中击败了
100.00%
的用户
内存消耗 :
2.1 MB
, 在所有 Go 提交中击败了
75.51%
的用户

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值