Leetcode面试系列 第1天:Leetcode 89 - 格雷码

简介: Leetcode面试系列 第1天:Leetcode 89 - 格雷码

最近,打算花点时间写个 Python 解决 Leetcode 题的系列文章~

大家是否还记得电影黑客帝国中的数字雨林的场景?事实上,计算机底层数据的存储和运算都是二进制的,因而面试题环节中面试官也经常会问到二进制相关问题。




比较典型的一个问题是 Leetcode 上第 89 号问题,

Leetcode 89. Gray Code

在线提交地址: https://leetcode-cn.com/problems/gray-code/


题目描述


格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。

给定一个代表编码总位数的非负整数 n,打印格雷码序列。格雷码序列必须以 0 开头。

例如,给定 n = 2,返回 [0,1,3,2]。其格雷编码是:

  1.  00-0
  2.  01-1
  3.  11-3
  4.  10-2


说明:

对于给定的 n,其格雷编码的顺序并不唯一(因此返回结果的顺序不重要)。

例如 [0,2,3,1] 也是一个有效的格雷编码顺序。



解题思路:

格雷码有个相应的数学公式,整数 i 的格雷码是 i^(i/2) 。而此题并没要求返回结果中的值的严格顺序。


网络异常,图片无法展示
|


于是只需遍历从 0 到 2^n - 1 的所有整数 i,使用公式将其转换为格雷码,添加到 List 中即可。


已AC代码(Python 3):

  1. classSolution:
  2.    def grayCode(self, n: int)->List[int]:
  3.        res =[]
  4.        for i in range(1<< n):
  5.            res.append((i >>1)^ i)
  6.        return res



网络异常,图片无法展示
|


如果需要在本地测试,需要

  • 先在代码开头引入 fromtypingimportList
    因为 LeetCode 中的 Python 3 使用了 Python 中的静态类型检查语法,故需从包 mypy中引入相关内容。
  • 然后实例化 Solution,最后调用相应的 method 即可。


完整代码如下:

  1. from typing importList

  2. classSolution:
  3.    def grayCode(self, n: int)->List[int]:
  4.        res =[]
  5.        for i in range(1<< n):
  6.            res.append((i >>1)^ i)
  7.        return res

  8. # 以下是测试代码
  9. obj =Solution()
  10. print(obj.grayCode(2))


运行结果:

执行用时: 48ms, 在所有 Python3 提交中击败了 87.40%的用户。


参考:

[LeetCode] Gray Code - 穆穆兔兔 - 博客园

https://www.cnblogs.com/diegodu/p/4371807.html


系列文章

目录
相关文章
|
3月前
|
开发者 索引 Python
这些年背过的面试题——LeetCode
本文是技术人面试系列LeetCode篇,一文带你详细了解,欢迎收藏!
|
4月前
|
Python
155. 最小栈 力扣 python 空间换时间 o(1) 腾讯面试题
155. 最小栈 力扣 python 空间换时间 o(1) 腾讯面试题
|
4月前
|
存储 算法 索引
1124. 表现良好的最长时间段 (python) 前缀和 分类讨论 最大长度 力扣 面试题
1124. 表现良好的最长时间段 (python) 前缀和 分类讨论 最大长度 力扣 面试题
|
4月前
|
存储 算法
经典的滑动窗口的题目 力扣 2799. 统计完全子数组的数目(面试题)
经典的滑动窗口的题目 力扣 2799. 统计完全子数组的数目(面试题)
|
5月前
|
存储 算法 数据挖掘
深入解析力扣168题:Excel表列名称(进制转换法详解及模拟面试问答)
深入解析力扣168题:Excel表列名称(进制转换法详解及模拟面试问答)
|
5月前
|
存储 算法 数据挖掘
深入解析力扣166题:分数到小数(模拟长除法与字符串操作详解及模拟面试问答)
深入解析力扣166题:分数到小数(模拟长除法与字符串操作详解及模拟面试问答)
|
5月前
|
存储 算法 数据可视化
【模拟面试问答】深入解析力扣163题:缺失的区间(线性扫描与双指针法详解)
【模拟面试问答】深入解析力扣163题:缺失的区间(线性扫描与双指针法详解)
|
5月前
|
存储 算法 数据可视化
【模拟面试问答】深入解析力扣164题:最大间距(桶排序与排序方法详解)
【模拟面试问答】深入解析力扣164题:最大间距(桶排序与排序方法详解)
|
5月前
|
SQL 算法 大数据
深入解析力扣176题:第二高的薪水(子查询与LIMIT详解及模拟面试问答)
深入解析力扣176题:第二高的薪水(子查询与LIMIT详解及模拟面试问答)
|
5月前
|
算法 数据挖掘 大数据
深入解析力扣172题:阶乘后的零(计算因子5的方法详解及模拟面试问答)
深入解析力扣172题:阶乘后的零(计算因子5的方法详解及模拟面试问答)