9. 迴文數
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.
Follow up:
Coud you solve it without converting the integer to a string?
判斷一個整數是否是迴文數。迴文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數。
示例 1:
輸入: 121 輸出: true
示例 2:
輸入: -121 輸出: false 解釋: 從左向右讀, 為 -121 。 從右向左讀, 為 121- 。因此它不是一個迴文數。
示例 3:
輸入: 10 輸出: false 解釋: 從右向左讀, 為 01 。因此它不是一個迴文數。
1 class Solution { 2func isPalindrome(_ x: Int) -> Bool { 3// 特殊情況: 4// 如上所述,當 x < 0 時,x 不是迴文數。 5// 同樣地,如果數字的最後一位是 0,為了使該數字為迴文, 6// 則其第一位數字也應該是 0 7// 只有 0 滿足這一屬性 8var num:Int=x 9if num < 0 || (num % 10 == 0 && num != 0) 10{ 11return false 12} 13 14var revertedNum:Int=0 15while(num > revertedNum) 16{ 17revertedNum = revertedNum*10 + num%10 18num /= 10 19} 20// 當數字長度為奇數時,我們可以通過 revertedNumber/10 去除處於中位的數字。 21// 例如,當輸入為 12321 時,在 while 迴圈的末尾我們可以得到 x=12,revertedNumber=123 22// 由於處於中位的數字不影響迴文(它總是與自己相等),所以我們可以簡單地將其去除。 23return num == revertedNum || num==revertedNum/10 24} 25 }
高效率版
1 class Solution { 2func isPalindrome(_ x: Int) -> Bool { 3/* 4if x < 0 {return false} 5var digits = [Int](), x = x 6while x != 0 { 7digits.append(x % 10) 8x /= 10 9} 10var i = 0, j = digits.count - 1 11for i in 0..<(digits.count / 2) { 12if digits[i] != digits[digits.count - 1 - i] {return false} 13} 14return true 15*/ 16if x < 0 {return false} 17var reversed = 0, temp = x 18while temp != 0 { 19reversed = reversed * 10 + temp % 10 20temp /= 10 21} 22return reversed == x 23} 24 }