LeetCode 每日一题:回文数

sunls24 于 2021-01-12 发布

题目

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

回文数

解法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
}

通过反转一半的数字,然后与未反转的进行比较可得出是否是回文数。

官方题解