您的位置:首页 > 编程语言 > Java开发

确定整数是否是回文?空间O(1)时间复杂度O(logn)

2017-10-22 13:23 344 查看
class Solution {
public boolean isPalindrome(int x) {
if( x <0 || (x % 10 == 0 && x != 0)){
return false;
}

int reverseNumber = 0;
while( x > reverseNumber){
reverseNumber = reverseNumber*10 + x%10;
x /= 10;
}

return x == reverseNumber || x == reverseNumber/10;

}
}


现在让我们考虑如何恢复上一半的数字。对于号码
1221
,如果我们这样做
1221
% 10
,我们得到最后一个数字
1
,得到第二个数字,我们需要删除最后一个数字
1221
,我们可以通过将它除以10来实现
1221
/ 10 = 122
。然后我们可以通过将模数乘以10得到最后一个数字
122
% 10 = 2
,如果我们将最后一位乘以10,并添加第二个最后一个数字
1 * 10
+ 2 = 12
,则它给出我们想要的还原数字。继续这个过程将给我们更多的数字的恢复的数字。

现在的问题是,我们怎么知道我们已经达到了这个数字的一​​半?

由于我们将数字除以10,并将反转数乘以10,当原始数字小于反转数时,这意味着我们已经处理了一半数字。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java
相关文章推荐