leetcode09回文

采用暴力解法(32ms或16ms 不准)效率垫底

在leetcode07的基础上实现:
1.负的整数肯定不属于回文
2.正数可以将正数翻转后与原来的数相比,相等则是回文



bool isPalindrome(int x){
    long tmp = x;
    if(tmp<0){
      return false;
    }
    long res = 0;
    while(tmp != 0){
        res = res*10 + (tmp%10);
        tmp = tmp/10;  
    }
    printf("%d",res);
    printf("tttt");
    printf("%d",tmp);
    if(res == x){
        return true;
    }
    return false;
}

12ms的答案少了 long 与 int 之间的转换

bool isPalindrome(int x){
    int reverse=0;
    int y=x;
    if(x<0||x>2147447412)return false;
    else {
        while(x!=0){
            reverse=reverse*10+x%10;
            x/=10;
        }
        if(y==reverse)return true;
        else return false;

    }
}

3. 下面是0ms的答案

将数取余数的方式讲每次得到的数存到数组中,再次数组的首位两头进行比较,如果是相同的那么就符合条件。(实际看起来时间复杂度也很高和上面一样O(N));

int g_data[20] = {0};

bool cmpData(int cnt)
{
    int i;

    if(cnt == 1){
        return true;
    }

    for(i = 0; i < (cnt/2); i++){
        if(g_data[i] != g_data[cnt -1 -i]){
            return false;
        }
    }

    return true;
}
bool isPalindrome(int x){
    int i;
    int num = x;
    int count = 0;
    int num1 = 0;
 
    if(x<0){
        return false;
    }else if(x==0){
        return true;
    }

    for(i = 0; i < 20 ; i++){
        g_data[i] = num % 10;
        num = num / 10;
        count++;
        if(num == 0){
            break;
        }
    }

    return cmpData(count);
}

你可能感兴趣的:(数据结构)