回文数

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

示例 1:

1
2
输入: 121
输出: true

示例 2:

1
2
3
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

示例 3:

1
2
3
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。

思路:
根据定义如果我们要找出一个数是否是回文数我们其实只需要将这个数分成平均分成两个部分,然后将后半部分翻转,只要翻转后的后半部分等于前半部分,就代表这个数是回文数。
我们拿1221来举例,假设我们拿到后半段是21然后将21翻转就是12了,和前半段比较相等就代表是回文数。
那么我们第一个问题,如何将21翻转,首先我们将1221%10 得到的就是第一个数1,然后用这第一个数 1 10 得到翻转后的正确位置。第二个数我们依然是122%10,然后得到第二个数,用第一个数加上第二个数就得到了12.
第二个问题就是我们如何将这个数分成两部分。当原始数/10小于翻转数
10的时候就代表已经完成了一半的翻转。

不过依然有两点需要注意,第一点是如果这个原始的数是负数的话我们需要返回,如果这个数是以0结尾的数,那么只有0才满足回文数,其他数都不满足回文数,我们直接返回false。
第二点是如果这个数的位数是基数,例如12321,那么循环完成之后原始数编程12,翻转数是123,这个时候我们用123/10得到12再和原始数12比较,忽略中间那一位数

以下是代码:

1
2
3
4
5
6
7
8
9
10
11
12
fileprivate func solution(_ num:Int)->Bool{
if num<0 || (num % 10 == 0 && num != 0){
return false
}
var originNum = num
var reverserNum = 0
while originNum > reverserNum {
reverserNum = reverserNum * 10 + originNum % 10
originNum = originNum / 10
}
return originNum == reverserNum || originNum == reverserNum / 10
}
-------评论系统采用disqus,如果看不到需要翻墙-------------