• LeetCode - #89 格雷编码


    在这里插入图片描述

    在这里插入图片描述

    前言

    我们社区陆续会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。)的 Swift 算法题题解整理为文字版以方便大家学习与阅读。

    LeetCode 算法到目前我们已经更新到 88 期,我们会保持更新时间和进度(周一、周三、周五早上 9:00 发布),每期的内容不多,我们希望大家可以在上班路上阅读,长久积累会有很大提升。

    不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。

    难度水平:中等

    1. 描述

    n 位格雷码序列 是一个由 2^n 个整数组成的序列,其中:

    • 每个整数都在范围 [0, 2^n - 1] 内(含 02^n - 1
    • 第一个整数是 0
    • 一个整数在序列中出现 不超过一次
    • 每对 相邻 整数的二进制表示 恰好一位不同 ,且
    • 第一个最后一个 整数的二进制表示 恰好一位不同

    给你一个整数 n ,返回任一有效的 n 位格雷码序列

    2. 示例

    示例 1

    输入:n = 2
    输出:[0,1,3,2]
    解释:
    [0,1,3,2] 的二进制表示是 [00,01,11,10] 。
    - 00 和 01 有一位不同
    - 01 和 11 有一位不同
    - 11 和 10 有一位不同
    - 10 和 00 有一位不同
    [0,2,3,1] 也是一个有效的格雷码序列,其二进制表示是 [00,10,11,01] 。
    - 00 和 10 有一位不同
    - 10 和 11 有一位不同
    - 11 和 01 有一位不同
    - 01 和 00 有一位不同
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    示例 2

    输入:n = 1
    输出:[0,1]
    
    • 1
    • 2

    约束条件:

    • 1 <= n <= 16

    3. 答案

     class GaryCode {
        func grayCode(_ n: Int) -> [Int] {
            var codes = [0]
            for i in 0..<n {
                codes += codes.reversed().map { $0 | 1 << i }
            }
            return codes
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 主要思想:n 的结果可以由 (n - 1) 推导出来,方法是颠倒顺序,在每个数字的二进制表示前面加上 1。
    • 时间复杂度: O(n)
    • 空间复杂度: O(2^n)

    该算法题解的仓库:LeetCode-Swift

    点击前往 LeetCode 练习

    关于我们

    我们是由 Swift 爱好者共同维护,我们会分享以 Swift 实战、SwiftUI、Swift 基础为核心的技术内容,也整理收集优秀的学习资料。

  • 相关阅读:
    linuxOPS基础_linux命令合集
    Xshell的下载与安装
    中断上下文使用spin_lock进程上下文使用spin_lock_irqsave的原因?
    【算法与数据结构】深入解析二叉树(一)
    微信小程序---页面事件
    【PAT甲级 - C++题解】1013 Battle Over Cities
    Prometheus+Grafana 部署
    beanutils.copyProperties()
    ToBeWritten之威胁狩猎环境应用
    最新Next 14快速上手基础部分
  • 原文地址:https://blog.csdn.net/qq_36478920/article/details/134414719