LeetCode Swift解题记录(9)回文数
题干解析
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1: 输入: 121 输出: true
示例 2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3: 输入: 10 输出: false 解释: 从右向左读, 为 01。因此它不是一个回文数。
进阶: 你能不将整数转为字符串来解决这个问题吗?
个人解题:
class Solution {
func isPalindrome(_ x: Int) -> Bool {
var charArr1 = Array<Character>()
var charArr2 = Array<Character>()
var newStr = String(x)
for i in newStr {
charArr1.append(i)
}
for i in newStr {
charArr2.insert(i, at: 0)
}
if (charArr1[0] == "-"){
return false
}
if (charArr1 == charArr2){
return true
}else{
return false
}
}
}
思路心得:
上述方法,遍历过多,时间维度大,不推荐。不过他为啥要进阶推荐这个方式
推荐解法:
class Solution {
// 1. 判断是否小于0 是则直接返回false
// 2. 去取余反转数字
// 3. 对比反转后的数字与原来数字是否相同
func isPalindrome(_ x: Int) -> Bool {
if x < 0 { return false }
var num = x
var reversal = 0
while num != 0 {
let a = num % 10
num = num / 10
reversal = reversal * 10 + a
}
return reversal == x
}
}
推荐评价:
此方法类似于之前的整数反转,效率非常高