leetcode -- Gray Code -- 数学题
2015-12-15 20:43
459 查看
https://leetcode.com/problems/gray-code/
格雷码的生成方法。
可以让i从0开始,每个code就是(i/2 )^ i 即,(i>>1)^i异或。跟0异或就是本身
格雷码的生成方法。
思路1 数学方法
给定n,则总共有1<<<可以让i从0开始,每个code就是(i/2 )^ i 即,(i>>1)^i异或。跟0异或就是本身
class Solution: # @return a list of integers def grayCode(self, n): res=[] size=1<<n for i in range(size): res.append((i>>1)^i) return res
思路2
我想的是backtracking的办法,如果父节点为0,则先搜0再搜1;如果父节点为1,则先搜1再搜0。但是结果顺序不对。还没找出原因class Solution(object): def convertBit(self, mylist): mylist.reverse() res = 0 for i,c in enumerate(mylist): res += 2 ** i * c return res def dfs(self, start, end, last_bit, subres, res): if start == end + 1: res.append(self.convertBit(subres[:])) return else: if last_bit == 0: subres[start] = 0 self.dfs(start + 1, end, 0, subres, res) subres[start] = 1 self.dfs(start + 1, end, 1, subres, res) else: subres[start] = 1 self.dfs(start + 1, end, 1, subres, res) subres[start] = 0 self.dfs(start + 1, end, 0, subres, res) def grayCode(self, n): """ :type n: int :rtype: List[int] """ if n == 0: return [0] subres = [0]*n res = [] self.dfs(0, n-1, 0, subres, res) return res
相关文章推荐
- 【凯子哥带你夯实应用层】新手必备的常用代码片段整理(一)
- Android学习之BroadcastReceiver
- UVa 108 - Maximum Sum(最大连续子序列)
- Mysql isam数据库恢复实战
- VC++获取当前系统时间日期 GetSystemTime()函数的用法
- jQuery扩展与noConflict
- igs站---khaj目前已停止数据更新
- FreeImage使用方法
- leetcode:119 Pascal's Triangle II-每日编程第二十五题
- SharePoint 2013中的爬网最佳做法
- 完全二叉树深度优先搜索
- peer not authenticated error
- 机器视觉开源代码集合
- zzulioj 1821: YZ的解密游戏 (字符串)
- Android添加快捷方式(CutShort)到手机桌面
- Codevs_P1173 最优贸易(SPFA)
- Go语言编程-初级
- 快过年了啊。
- UItable的创建和简单的理解
- No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK