让我们一起啃算法----回文数

栏目: IT技术 · 发布时间: 4年前

内容简介:这是一个比较简单的题目,题干如下:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:

回文数(Palindrome-Number)

这是一个比较简单的题目,题干如下:

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

示例 1:

输入: 121

输出: true

示例 2:

输入: -121

输出: false

解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

示例 3:

输入: 10

输出: false

解释: 从右向左读, 为 01 。因此它不是一个回文数。

来源:力扣

解题思路

按照题目的定义: 负数一定不是回文数,并且 [0,9] 的数一定是回文数

其次,我们稍微延伸一下题目,如果判断一个字符串是否是回文字符串,我们会怎么做?常规思路就是设置两个指针 ij 分别指向字符串的第一个字符和最后一个字符,然后 指针 i 向后挪指针 j 向前挪 ,每挪动一次就比较 指针 i 指向的字符是否和指针 j 指向的字符相等 。具体流程如下:

让我们一起啃算法----回文数

如上,那我们是不是可以沿用判断字符串是否是回文字符串的思路来判断数字呢?当然是可以的啦。

所以现在的问题变成了怎么拿到数字的第一位和最后一位?上一篇文章 让我们一起啃算法----整数反转 我们知道了 一个数与10取模可以得到最后一位的值 。那第一位的值如何得到呢?可以用如下方式:

假设目标数字是 3245,它是一个四位数,最小的四位数是1000,3245 / 1000 就可以拿到第一位的值即 3 。

拿到了第一位的值和最后的一位的值之后,我们只需要判断是否相等即可。

具体的代码实现

GO语言实现:

func isPalindrome(x int) bool {
    if x < 0 {
        return false
    }
    div := 1
    // 得到相应位数的最小值
    // 例如:3245,那么div的值就是1000
    for x / (div) >=  10 {
        div *= 10
    }
    for x != 0 {
        // 得到第一位的值
        left := x / div
        // 得到最后一位的值
        right := x % 10
        if left != right {
            return false
        }
        // 去掉第一位和最后一位
        // 例如:( 3245 - 3 * 1000 )/ 10 = 24
        x = (x - left * div) / 10

        // 因为去掉了两位,因此div也相应的调整
        div /= 100
    }
    return true
}

总结

每天进步一点点,加油!

算法教程项目,每天更新一题,点个 star 支持一下呀:

https://github.com/wx-satellite/learning-algorithm

欢迎关注我们的微信公众号,每天学习 Go 知识

让我们一起啃算法----回文数

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Code

Code

Charles Petzold / Microsoft Press / 2000-10-21 / USD 29.99

Paperback Edition What do flashlights, the British invasion, black cats, and seesaws have to do with computers? In CODE, they show us the ingenious ways we manipulate language and invent new means of ......一起来看看 《Code》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

SHA 加密
SHA 加密

SHA 加密工具

html转js在线工具
html转js在线工具

html转js在线工具