9. 回文数

一、题目原型:

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

二、题目意思剖析:

回文数可以看作一个对称的字符串。

输入: 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。

《9. 回文数》 总提交数
《9. 回文数》 提交结果

有其他好的方法请极速留言,非常乐意一起探讨。😄

    原文作者:单车同学
    原文地址: https://www.jianshu.com/p/0780decd2652
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞