每日算法 -【Swift 算法】实现回文数判断!

Hello 各位,在做了几天烧脑的算法题后,我们来个简单的 🎈------Swift 实现回文数判断!

在连续攻克了几个思维缠绕的算法题后,是时候放松一下,来一道经典又亲切的题目------判断一个整数是否是回文数。别看它简单,里面藏着不少细节。今天我们用 Swift 来写这个题目,主打数学解法,当然最后也会带上大家熟悉的字符串方式作为拓展。


📌 什么是回文数?

所谓回文数,就是从左往右读和从右往左读都一样的整数。

举个例子:

  • ✅ 121 是回文数
  • ❌ -121 不是(因为多了一个负号)
  • ❌ 10 也不是(正着 10,反着 01)

🧠 方法一:不使用字符串的数学解法(推荐)

很多人第一反应是把数字变成字符串然后反转判断,其实这道题可以更优雅地用数学方式处理,而且效率更高。

🚩 思路:

我们不需要反转整个整数,只需要反转"后半部分",然后和前半部分比较即可:

例如:12321

拆一半:12 和 123 % 100 = 321(模拟反转一半)

最终比较:前半部分 == 后半部分(去掉中间那个 3)

✅ Swift 实现:

swift 复制代码
func isPalindrome(_ x: Int) -> Bool {
    // 特殊情况排除:负数 或 末尾为0但不等于0
    if x < 0 || (x % 10 == 0 && x != 0) {
        return false
    }

    var x = x
    var reversedHalf = 0

    while x > reversedHalf {
        reversedHalf = reversedHalf * 10 + x % 10
        x /= 10
    }

    // 奇数位数时,中间的数字不影响判断,所以 /10
    return x == reversedHalf || x == reversedHalf / 10
}

🧪 测试一下:

swift 复制代码
print(isPalindrome(121))   // true
print(isPalindrome(-121))  // false
print(isPalindrome(10))    // false
print(isPalindrome(1221))  // true
print(isPalindrome(0))     // true

🌱 方法二(拓展):使用字符串的方式(简单但不够优雅)

虽然我们主打数学思维,但也不妨看看更直观的做法,适合初学者快速实现。

💡 实现如下:

swift 复制代码
func isPalindrome(_ x: Int) -> Bool {
    let s = String(x)
    return s == String(s.reversed())
}

虽然这也能解决问题,但实际效率比数学方式要低,在面试中建议使用数学解法展示你的算法功底 💪。


🧾 总结

方法 原理 性能 推荐指数
方法一 数学反转一半 高效 🚀 面试推荐
方法二 字符串反转比较 中等 🌱 入门推荐

👋 好啦,今天这道题算是轻松一下。如果你还没刷过这题,可以马上写一写,试试两种方法谁更快。以后我们继续攻克更多有趣的算法题,一起进阶!

如有疑问欢迎评论区一起交流~🙂

相关推荐
zyl76511 小时前
FlashAttention 详解:从 GPU 硬件、普通 Attention 到分块计算与 Online Softmax
算法
叫Guava不是瓜娃13 小时前
我用 Swift 写了个本地语音输入:按住说话,松开就是整理好的文字(开源)
swift
爱读书的小胖15 小时前
LeetCode 122:买卖股票的最佳时机 II(C)解题分析
算法
结局无敌15 小时前
React Native for OpenHarmony 实战:三方库 react-native-modal-dialog 的鸿蒙化适配指南
深度学习·算法·react native·react.js·harmonyos
WJ.Polar15 小时前
Java封装、继承、多态
java·开发语言
摇滚侠15 小时前
Java 中如何表示负数,有符号和无符号的区别,补码的计算规则,char byte short int long 的范围
java·开发语言
OPEN-F15 小时前
ROS2系列教程:上位机建图与导航(原理综合)
算法·机器人
weixin_3077791315 小时前
C++代码实现MATLAB中的fitrtree函数功能
开发语言·c++·算法·matlab
爱读书的小胖16 小时前
Codewars:Rot13(C)解题分析
c语言·开发语言
tomwang032216 小时前
路径优化建模、优化算法分类及工程化小结
算法·数学建模·分类