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())
}
虽然这也能解决问题,但实际效率比数学方式要低,在面试中建议使用数学解法展示你的算法功底 💪。
🧾 总结
方法 | 原理 | 性能 | 推荐指数 |
---|---|---|---|
方法一 | 数学反转一半 | 高效 | 🚀 面试推荐 |
方法二 | 字符串反转比较 | 中等 | 🌱 入门推荐 |
👋 好啦,今天这道题算是轻松一下。如果你还没刷过这题,可以马上写一写,试试两种方法谁更快。以后我们继续攻克更多有趣的算法题,一起进阶!
如有疑问欢迎评论区一起交流~🙂