天天看点

leetcode刷题笔记(三)[Go语言实现]

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
}