一、题目原型:
判断一个整数是否是回文数。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
二、题目意思剖析:
回文数可以看作一个对称的字符串。
输入: 121
输出: true
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
三、解题思路:
第一种思路:用数组将每个数字存起来,看是否对称
1.如果该整数为负数,就不是回文数。比如-123,反过来是321-,不管如何反都不是。
2.遍历将余数保存在一个数组里,然后遍历该数组,如果左右对称 --array[i] == array[array.count - 1 - i]
,就是回文数。否则不是。
func isPalindrome(_ x: Int) -> Bool {
if x < 0 {
return false
}
var remainder: Int = 0
var tempX: Int = x
var array: Array = Array.init(repeating: 0, count: 0)
while tempX != 0 {
remainder = tempX % 10
tempX = tempX / 10
array .append(remainder)
}
for i in 0..<array.count {
if array[i] != array[array.count - 1 - i] {
return false
}
}
return true
}
第二种思路:将数字反序,然后对比和原整数是否相等
(推荐,耗时较少,少了一步遍历的时间)
func isPalindrome(_ x: Int) -> Bool {
if x < 0 {
return false
}
var tempX: Int = x
var result: Int = 0
while tempX != 0 {
result = result * 10 + tempX % 10
tempX = tempX / 10
}
if result != x {
return false
}
return true
}
四、小结
如果是第一种方法大概是300ms,第二种大概是200ms。
有其他好的方法请极速留言,非常乐意一起探讨。😄
个人博客地址