9. 回文数
题目描述:
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
- 例如,121 是回文,而 123 不是。
示例 1:
输入:x = 121
输出:true
示例 2:
输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。
提示:
- -2^31 <= x <= 2^31 - 1
解题分析及思路:
方法一:字符串
思路:
将 x 转换为字符串,然后将字符串的首尾字符进行比较,如果它们相同,则继续比较字符串的下一个字符,直到比较完所有的字符。
func isPalindrome(x int) bool {
if x < 0 {
return false
}
s := strconv.Itoa(x)
l := len(s)
for i := 0; i <= (l-1)/2; i++ {
if s[i] != s[l-i-1] {
return false
}
}
return true
}
复杂度:
- 时间复杂度:O(N),其中 N 是x的大小。
- 空间复杂度:O(1),只使用常数额外空间。
执行结果:
- 执行耗时:8 ms,击败了85.92% 的Go用户
- 内存消耗:4.3 MB,击败了32.72% 的Go用户
方法二:反转数字
思路:
- 如果 x 是负数,则 x 不是回文数,因为负数的负号不会被反转。
- 反转 x 的数字,然后将反转后的数字与 x 进行比较,如果它们相同,则 x 是回文数。
func isPalindrome1(x int) bool {
if x < 0 {
return false
}
var x1, y = x, 0
for x1 != 0 {
y = y*10 + x1%10
x1 /= 10
}
return x == y
}
复杂度:
- 时间复杂度:O(N),其中 N 是x大小。
- 空间复杂度:O(1),只使用常数额外空间。
执行结果:
- 执行耗时:14 ms,击败了45.76% 的Go用户
- 内存消耗:4.12 MB,击败了88.07% 的Go用户
Tags :
通过次数 1.7M 提交次数 3.1M 通过率 56.3%