不转字符串的方式
func isPalindrome(_ x: inout Int) -> Bool {
if x == 0 {
return true
}
if x < 0 || x%10 == 0 { //负数和尾部是0结尾的,必然是非回文
return false
}
var reversed = 0
while x > reversed {
reversed = reversed * 10 + x % 10 //从尾部开始拼成新的数字
x /= 10 //同时使原数字降位
}
return x == reversed || x == reversed / 10 //处理x长度为奇偶的情况
}
转字符串后用双指针的形式
func isPalindrome(_ x: Int) -> Bool {
let s = String(x)
var left = 0
var right = s.count-1
while left != right {
let start = s.index(s.startIndex, offsetBy: left)
let end = s.index(s.startIndex, offsetBy: right)
if (s[start] == s[end]) {
if (left == right-1) {//处理x长度为偶数的情况
return true
}
left += 1
right -= 1
} else {
return false
}
}
return true
}
网友评论