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

栏目: 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 知识

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

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

查看所有标签

猜你喜欢:

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

响应式Web设计实践

响应式Web设计实践

[美] Tim Kadlec / 侯鸿儒 / 人民邮电出版社 / 2013-3-1 / 55.00元

随着各种各样的移动设备不断地涌现到使用者面前,Web设计的适应性已经成为设计师们所面临的最为艰巨的挑战。你设计出的网站不仅要在桌面计算机的大尺寸屏幕上可以为用户提供友好的UI和用户体验,同时在小尺寸屏幕上也应该可以提供一致的用户体验,并可以让用户能够在桌面大屏幕上和移动小屏幕上平滑切换,同时没有任何的不适应感觉。 本书作者是一位出色的开发者,在本书中,他将诸多技术和设计理念杂糅在一起,再辅以......一起来看看 《响应式Web设计实践》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

URL 编码/解码
URL 编码/解码

URL 编码/解码