9.回文数(Swift版)

作者: Mage | 来源:发表于2018-12-11 15:45 被阅读6次

    一、题目

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

    输入: 121
    输出: true
    

    示例 2:

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

    示例 3:

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

    进阶:
    你能不将整数转为字符串来解决这个问题吗?

    二、解题

    针对题目只需要获取x的后半段翻转后的数,并和前半段进行比较,此时会出现两种情况,
    1.x的位数为偶数,则前后段相等为回文数;
    2.x的位数为奇数时,则当翻转的数大于或等于前半段的数时停止,此时即可达到该数的后半段整除10应该和前半段相等。
    获取后半段翻转后的数的方法,见代码实现里的while循环。

    三、代码实现

        class Solution {
            func isPalindrome(_ x: Int) -> Bool {
                // 如果x小于0,则x不是回文数;如果x的尾数是0,则x也不是回文数(需排除x==0的情况,因为0是h回文数)
                if (x < 0) || (x % 10 == 0 && x != 0){
                    return false
                }
                var num = x
                var halfNum = 0
                 // 当halfNum 大于等于 num时,停止循环
                while halfNum < num {
                    // 得到后半段翻转后的数
                    halfNum = halfNum * 10 + num % 10
                    num /= 10
                }
                return  halfNum == num ||  halfNum / 10 == num
            }
        }
    

    Demo地址:github

    相关文章

      网友评论

        本文标题:9.回文数(Swift版)

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