当前位置: 首页 > article >正文

Swift 实现:颠倒 32 位无符号整数的二进制位

在这里插入图片描述
在这里插入图片描述

网罗开发 (小红书、快手、视频号同名)

  大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等方向。在移动端开发、鸿蒙开发、物联网、嵌入式、云原生、开源等领域有深厚造诣。

图书作者:《ESP32-C3 物联网工程开发实战》
图书作者:《SwiftUI 入门,进阶与实战》
超级个体:COC上海社区主理人
特约讲师:大学讲师,谷歌亚马逊分享嘉宾
科技博主:极星会首批签约作者

文章目录

    • 摘要
    • 描述
    • Swift 题解答案
    • 题解代码
    • 代码分析
    • 示例测试及结果
    • 时间复杂度
    • 空间复杂度
    • 总结
    • 未来展望
    • 参考资料

摘要

在本文中,我们将学习如何使用 Swift 解决 LeetCode 问题,反转 32 位无符号整数的二进制位。通过高效算法和进阶优化方法,实现快速、准确的结果输出。本文还提供了详细的代码分析、时间复杂度和空间复杂度的评估。

描述

题目要求颠倒给定 32 位无符号整数的二进制位,并返回结果。

示例 1

输入: n = 00000010100101000001111010011100
输出: 964176192 (00111001011110000010100101000000)
解释: 输入表示的整数是 43261596,反转后的整数是 964176192。

示例 2

输入: n = 11111111111111111111111111111101
输出: 3221225471 (10111111111111111111111111111111)
解释: 输入表示的整数是 4294967293,反转后的整数是 3221225471。

Swift 题解答案

核心思路:

  1. 每次从输入的右端提取一个二进制位,并将其“反向”插入到输出的正确位置。
  2. 使用位运算(右移和左移)来实现高效处理。

题解代码

func reverseBits(_ n: UInt32) -> UInt32 {
    var result: UInt32 = 0
    var input = n
    
    for _ in 0..<32 {
        // 将当前最低位移动到结果的最高位位置
        result = (result << 1) | (input & 1)
        // 右移输入以处理下一个位
        input >>= 1
    }
    
    return result
}

代码分析

  1. 初始化变量

    • result 用于存储反转后的值,初始为 0
    • input 是输入值,用于逐步提取最低位。
  2. 核心逻辑

    • 循环 32 次(对应 32 位整数)。
    • 提取 input 的最低位(input & 1)。
    • 将提取的位插入 result 的最高位位置(result = (result << 1) | bit)。
    • input 右移以准备处理下一个位(input >>= 1)。
  3. 返回结果

    • 当循环结束时,result 即为反转后的二进制表示。

示例测试及结果

测试代码

import Foundation

var test1: UInt32 = 0b00000010100101000001111010011100
var test2: UInt32 = 0b11111111111111111111111111111101

print(reverseBits(test1)) // 输出: 964176192
print(reverseBits(test2)) // 输出: 3221225471

结果

964176192
3221225471

时间复杂度

  • 单次调用:循环执行 32 次位操作。
  • 总时间复杂度O(1)(常数复杂度)。

空间复杂度

  • 仅使用常数级别的辅助变量。
  • 总空间复杂度O(1)

总结

  1. 使用位运算实现了高效的原地反转算法,没有额外的内存开销。
  2. 提供了一个清晰易懂的实现方法,适合应用于实际工程。

未来展望

  1. 优化多次调用

    • 通过缓存已计算结果的方式减少重复计算。
    • 使用哈希表存储中间结果,提高性能。
  2. 扩展思路

    • 研究反转 64 位或更大整数的解法。
    • 优化算法在硬件级别的实现,例如并行计算。

参考资料

  • LeetCode 官方题解
  • Swift 位运算相关文档

http://www.kler.cn/a/513589.html

相关文章:

  • 【生产力工具】ChatGPT for Windows桌面版本安装教程
  • SQL刷题快速入门(三)
  • STM32 FreeRTOS 任务挂起和恢复---实验
  • (undone) 并行计算学习 (Day2: 什么是 “伪共享” ?)
  • Linux-C/C++--深入探究文件 I/O (下)(文件共享、原子操作与竞争冒险、系统调用、截断文件)
  • 如何在oracle关闭情况下如何修改spfile的参数
  • 构建高可用和高防御力的云服务架构第一部分:深入解析DDoS高防(15)
  • AUTOSAR从入门到精通-线控底盘技术
  • 一、vue智能Ai对话(高仿通义千问)普通版。
  • 数电票:引领会计行业数字化革命的关键力量
  • 定时器setTimeout和setInterval
  • 【RabbitMQ 消息丢失常见情况分析】
  • 依赖倒置原则
  • node和nest生态及区别和优势
  • Swift语言的函数实现
  • 解决MySQL查询不区分大小写的两种方式
  • 【GORM】Hook钩子函数,Session会话函数讲解及使用案例
  • 【2025小年源码免费送】
  • OFD实现在线预览的几种方式
  • 计算机的错误计算(二百一十八)
  • 【Golang/gRPC/Nacos】在golang中将gRPC和Nacos结合使用
  • 刷题日记3
  • 天机学堂7--Redisson自定义注解AOP以及SPEL表达式实现分布式锁
  • 顽固性失眠怎么调理
  • InVideo AI技术浅析(五):生成对抗网络
  • centos下设置服务器开机自启动 redis