9. 回文数

作者: 花果山松鼠 | 来源:发表于2018-07-17 17:10 被阅读1次

    一、题目原型:

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

    二、题目意思剖析:

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

    输入: 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. 回文数

        本文链接:https://www.haomeiwen.com/subject/czrgpftx.html