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
 }

github代码

results matching ""

    No results matching ""