leetcode刷题笔记(三)
[9. 回文数](https://leetcode-cn.com/problems/reverse-integer/)
解法一:
转换为字符串,再开个result倒着放进去,用result和转换出来的字符串进行对比
func isPalindrome(x int) bool {
var result string
xstring := strconv.Itoa(x)
for i := 0; i < len(xstring); i++ {
result = result + fmt.Sprintf("%c",xstring[len(xstring)-i-1])
}
if xstring == result {
return true
}else {
return false
}
}
解法二:
简单的数学计算进行转换
1,通过取余/10和获得每一位数字
2.进行重新赋权,使其倒转
3.考虑负数情况
func reverse(x int) int {
var ans int64
y := int64(x)
for{
ans = ans * 10 + y % 10
y = y / 10
if y == 0 {
break
}
}
result := int32(ans)
if int64(result) == ans{
return int(ans)
}else {
return 0
}
}
解法三(解法一优化版):
自身首位相比
成功条件:1、执行对比相同。2、执行到它们结束了(bot < top)
false条件:1、遇到不同
func isPalindrome(x int) bool {
xstring := strconv.Itoa(x)
bot,top := 0,len(xstring)-1
for {
if bot < top {
if xstring[bot] != xstring[top] {
return false
}
bot++
top--
}else {
return true
}
}
}
解法四(解法二优化版):
让y不断接近x
让x同时不断接近y
本质上是x和y进行了相对的操作,x/10因为整型运算,
实际上相当:x在进行(x-个位数/10),y再进行(y*10-t)
ps:双向奔赴的爱情真的是绝绝子🤗
func isPalindrome(x int) bool {
if x < 0 {
return false
}
if x==0{
return true
}
if x%10==0{
return false
}
y := 0
for x>=y{
if x==y{
return true
}
t := x%10
x/=10
if x==y{
return true
}
y=y*10+t
}
return false
}