[英]To check whether an integer is a palindrome in O(1) space(Wrong answer)
我尝试通过按位运算反转数字来解决此问题:-例如,如果数字的二进制表示形式为00000110,则此代码执行的操作是将0000011发送到代码中,然后左移reverse_num 5次以获得01100000,这显然是是原始的反转,此程序在该数字后加上原始数字后再进行“&”运算。如果答案为1,则将该数字称为回文,否则返回false。逻辑上是否存在某些缺陷? 如果有,我认为它在&部分中。
class Solution {
public:
bool isPalindrome(int x) {
if(x<0)
return false;
int num=x;
int reverse_num=x;
int count=sizeof(x);
num >>= 1;
while(num)
{
reverse_num <<= 1;
reverse_num |= num & 1;
num >>= 1;
count--;
}
reverse_num <<= count;
if(!(reverse_num&x))
return true;
else return false;
}
};
我仍然想知道以前的代码有什么问题。 很抱歉提出这样一个愚蠢的问题。我是编程方面的菜鸟。 原始问题在这里: https : //oj.leetcode.com/problems/palindrome-number/
尽管我可以通过以下方法解决这个问题:
class Solution {
public:
bool isPalindrome(int x) {
long long y=0;
long long t=x;
long long p;
p=x;
while(t){
y=y*10+t%10;
t=t/10;
}
if(p==y && p>=0)
return true;
else return false;
}
};
对于最后的if语句,&&是逻辑与。 在C / C ++(和许多其他语言)中,对整数的逻辑测试将返回true,除非该值为0。
因此,如果x或reverse_num为0,则您的函数只会返回true
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.