题干解析
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 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 } }推荐评价: 此方法类似于之前的整数反转,效率非常高