Determine whether an integer is a palindrome. Do this without extra space.
题目意思:判断一个整数是否是回文数
例如:123211,1221即为回文数,110则不是回文数
===================================================================
思路一:
现将这个整数反转,然后判断返转后的数是否与原来的是相等,相等则为回文数,反之则不是。
利用了上一题[LeetCode] 7.Reverse Integer - Swift的算法
实现代码:
class Solution { func isPalindrome(_ x: Int) -> Bool { if x <= 0 { return false } var tmp: Int = x var str: String = "" var reverseX: Int = 0 while tmp/10 != 0 { str = str.appending("\(tmp%10)") tmp = tmp/10 } str = str.appending("\(tmp)") reverseX = Int(str)! if reverseX == x { return true } return false } }
===================================================================
思路二:(思路一的效率略低,参考了别人的思路)
整型分为两种情况:
第一种情况:奇数位,如121,走完while循环后leaveNum=1,newNum=12,根据leaveNum==newNum/10,则返回true,判断得出121是回文数
第二种情况:偶数位,如1221,走完while循环后leaveNum=12,newNum=12,根据leaveNum==newNum,则返回true,判断得出1221是回文数
这种方法循环执行的次数是思路一方法的一半,效率自然高!
class Solution { func isPalindrome(_ x: Int) -> Bool { if x < 0 || (x != 0 && x % 10 == 0) { return false } var leaveNum = x var newNum = 0 while leaveNum > newNum { newNum = newNum * 10 + leaveNum % 10 leaveNum = leaveNum / 10 } return (newNum == leaveNum || leaveNum == newNum / 10) } }