给你一个整数 x
,如果 x
是一个回文整数,返回 true
;否则,返回 false
。
回文数
是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
示例 2:
1 2 3
| 输入:x = -121 输出:false 解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
|
示例 3:
1 2 3
| 输入:x = 10 输出:false 解释:从右向左读, 为 01 。因此它不是一个回文数。
|
提示:
进阶:你能不将整数转为字符串来解决这个问题吗?
取低位不断加入到reverseNum,直到reverseNum >= x
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| class Solution { public boolean isPalindrome(int x) { if(x >=0 && x < 10){ return true; } if(x < 0 || (x % 10) == 0 && x != 0){ return false; } int reverseNum = 0; while(x > reverseNum){ reverseNum = reverseNum * 10 + x % 10; x /= 10; } if(reverseNum > x){ reverseNum /= 10; } return x == reverseNum; } }
|
时间复杂度:$O(logn)$,对于每次迭代,我们会将输入除以 10,因此时间复杂度为 $O(logn)$
空间复杂度:$O(1)$,我们只需要常数空间存放若干变量。