題目
來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/palindrome-number
判斷一個(gè)整數(shù)是否是回文數(shù)÷钗回文數(shù)是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數(shù)瑞佩。
示例 1:
輸入: 121
輸出: true
示例 2:
輸入: -121
輸出: false
解釋: 從左向右讀, 為 -121 阻桅。 從右向左讀, 為 121- 遏餐。因此它不是一個(gè)回文數(shù)坊饶。
示例 3:
輸入: 10
輸出: false
解釋: 從右向左讀, 為 01 。因此它不是一個(gè)回文數(shù)挫望。
解法
- 方法1
func isPalindrome(x int) bool {
if x < 0 {
return false
}
var y int
tmp := x
for x != 0 {
modValue := x % 10
y = y*10 + modValue
x = x / 10
}
if tmp == y {
return true
}
return false
}
缺點(diǎn):沒(méi)有考慮溢出問(wèn)題立润,且反轉(zhuǎn)全部,占用內(nèi)存大媳板,消耗時(shí)間長(zhǎng)
- 方法2
leetcode官方提供解法
func isPalindrome(x int) bool {
/*
當(dāng)x < 0 時(shí)桑腮,x 不是回文數(shù)
如果數(shù)字的最后一位是0,為了使該數(shù)字為回文蛉幸,
則其第一位數(shù)字也應(yīng)該使0
只有0滿(mǎn)足這一屬性
*/
if x < 0 || (x % 10 == 0 && x != 0) {
return false
}
var revertedNumber int
for x > revertedNumber {
revertedNumber = revertedNumber*10 + x % 10
x /= 10
}
/*
當(dāng)數(shù)字長(zhǎng)度為奇數(shù)時(shí)破讨,可以通過(guò)revertedNumber/10去除
中位的數(shù)字
*/
return x == revertedNumber || x == revertedNumber/10
}