LeetCode高薪算法+计算机职称考试Swift in LeetCode

LeetCode 9. 回文数 Palindrome Numbe

2019-07-31  本文已影响0人  1江春水

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

【示例1】

输入: 121
输出: true

【示例1】

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

【示例1】

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

【思路1】
1、转化为字符串,判断字符串相同
2、时间复杂度O(n)

func isPalindrome(_ x: Int) -> Bool {
    var str = String()
    let chas = String(x).reversed()
    for c in chas {
        str.append(c)
    }
    if String(x) == str {
        return true
    }
    return false
}

【思路2】
1、从x的各位到最高位 依次遍历得到一个新数值,判断两个数值是否相等
2、时间复杂度O(log10ºn),(以十为底n的对数)因为每次都会除以10

func isPalindrome(_ x: Int) -> Bool {
    if x < 0 {
        return false
    }
    var sum = 0
    var tmp = x
    while tmp > 0 {
        sum = sum*10 + tmp%10
        tmp/=10
    }
    return sum == x
}

【思路3】
1、思路2的改进
2、只需要遍历一半就可以,如果这两半相同,那就是回文数,需要判断奇数偶数
3、当halfSum大于x的时候,就遍历一半了,就停止遍历了!(多读几遍😁)
4、时间复杂度O(log10ºn) (以十为底n的对数)

代码实现:

func isPalindrome(_ x: Int) -> Bool {
    if x < 0 || (x%10 == 0 && x != 0) {
        return false
    }
    var halfSum = 0
    var tmp = x
    while tmp > halfSum {//当一半遍历完 halfSum就大于x了
        halfSum = halfSum*10 + tmp%10
        tmp/=10
    }
  //或前是 偶数,或后是奇数
    return tmp == halfSum || tmp == halfSum/10
}
上一篇下一篇

猜你喜欢

热点阅读