Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.
确定一个整数是否是回文。一个整数是一个回文,当它读取相同的向后和向前。
Example 1:
Input: 121 Output: true
Example 2:
Input: -121 Output: false Explanation: From left to right, it reads -121. From right to left, it becomes 121-. Therefore it is not a palindrome.
Example 3:
Input: 10 Output: false Explanation: Reads 01 from right to left. Therefore it is not a palindrome.
Idea 1:
From example 2, we could get an information that the negative number cannot be a palindrome. So my first idea is to convert the given integer to string and use a left index and a right index to see if the first letter == last letten. If not, return false, otherwise plus 1 to left and minus 1 to right untill left > right.
从例2中,我们可以得到一个信息,即负数不能是回文。所以我的第一个想法是把给定的整数转换成字符串,使用左索引和右索引来看看第一个字母==最后一个letten。否则,向左加1,向右减1,直到左>右。
func isPalindrome(_ x: Int) -> Bool {
if x < 0 {return false}
let container = "\(x)"
var left = 0
var right = container.count - 1
while left < right{
if container[container.index(container.startIndex, offsetBy: left)] != container[container.index(container.startIndex, offsetBy: right)]{
return false
}
left += 1
right -= 1
}
return true
}
Idea 2: Solved this without converting the integer to string.
To see if the 123 is a palindrome, we just neet to compare it to 321 which is the reversion of 123. The algorithm is same as Leetcode-7-Reverse Interger.
为了看123是不是回文,我们只需要把它和321比较,321是123的回文。算法与Leetcode-7-Reverse Interger相同。
func isPalindrome(_ x: Int) -> Bool {
if x < 0 {return false}
var temp = x
var reversedInt = 0
while temp / 10 != 0 {
reversedInt += temp % 10
reversedInt *= 10
temp /= 10
}
return reversedInt+temp%10 == x ? true : false
}