繁体   English   中英

检查整数是否为O(1)空间中的回文(错误答案)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM