题目
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
解法1:字符串反转
func isPalindrome(x int) bool {
if x < 0 {
return false
}
s := strconv.Itoa(x)
runes := []rune(s)
for from, to := 0, len(runes)-1; from < to; from, to = from+1, to-1 {
runes[from], runes[to] = runes[to], runes[from]
}
return s == string(runes)
}
解法2:按位取模
func isPalindrome(x int) bool {
if x < 0 {
return false
}
if x == 0 {
return true
}
for i, j := 0, int(math.Log10(float64(x))); i < j; i, j = i+1, j-1 {
if x/int(math.Pow10(i))%10 != x/int(math.Pow10(j))%10 {
return false
}
}
return true
}
通过取模获得 x
的首位和尾位比较是否相同,然后依次比较全部的数字。
解法3:反转一半
func isPalindrome(x int) bool {
if x < 0 || (x%10 == 0 && x != 0) {
return false
}
rev := 0
for x > rev {
rev = rev*10 + x%10
x /= 10
}
return x == rev || x == rev / 10
}
通过反转一半的数字,然后与未反转的进行比较可得出是否是回文数。