Go语言力扣刷题-回文数|Go主题月
- 回文数
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。
1
2
3
4
5
6 >输入:x = 121
>输出:true
>输入:x = -121
>输出:false
>解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。进阶:你能不将整数转为字符串来解决这个问题吗?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindrome-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
最基本的算法:将数字转换为字符串 -> reverse -> 与原字符比较,相同则为true,不同则为false。其中最容易出错的点在于如何将整数转换为字符,即 int to string
,单纯的显式转换string(x)并不会将x转换为字符串,而是将x当做ASCII编码转换为了对应字符。解法代码如下:
1 | import "strconv" |
第二种数学方法,将数字反转,与原数字比较。这种方法可能会导致数字越界溢出,因此可变形为依次比较数字的地位和高位,若均相同则返回true,否则返回false。实现逻辑与第三种类似。
第三种,也就是力扣官方给出的算法,取出尾部一半数字,反转,与剩余数字做比较,即
比如,1221,截取尾部21,反转为12,原数字去除尾部后变为12,12=12,则为回文数。
又比如,12321,截取尾部321,反转为123,原数字除去尾部为变为12,123 != 12,但是,123 / 10 = 12,所以原数字也是回文数。
1 | func isPalindrome(x int) bool { |
Go语言力扣刷题系列文章 |Go主题月