1.1. 题目
1.1.1. 回文数
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
进阶:
你能不将整数转为字符串来解决这个问题吗?
1.1.2. 题解:
- 回文数就是把一个数倒过来,还跟原数一样,那么这个数就是回文数
- 那么,肯定的是, 负数肯定都不是回文数了
- 10的倍数肯定也不是了..
- 大于0小于10的肯定都是回文数了..
1.1.3. 思路:
- 我看完有两种解法
- 不看进阶的要求,直接转成字符串,然后把第一和倒数第一,第二和倒数第二 这样进行对比,不一样的肯定就不符合了
- 如果不转成字符串,可以把该数进行反转(先去做一下 整数反转 题),利用递归把这个数反转一下,然后跟原数进行比较,不一样肯定就不是了
1.1.4. 代码:
点击显示
func isPalindrome(x int) bool {
if x < 0 {
return false
}
if x < 10 {
return true
}
res,_ := re(x,10)
if res == x {
return true
}
return false
}
func re(x, k int) (res, m int) {
s := x / k
rem := x % k
if s != 0 {
res,m = re(s,k)
} else {
m = 1
}
res = res + rem * m
return res,m*10
}
func isPalindrome2(x int) bool {
if x < 0 {
return false
}
str := strconv.Itoa(x)
strLen := len(str)
for i:=0;i<strLen/2;i++ {
if str[i] != str[strLen-i-1] {
return false
}
//fmt.Println(string(str[i]),string(str[strLen-i-1]))
}
return true
}