LeetCode :9 回文数 C++

描述

对,就是这么突然的切换到了leetcode-cn,变成了全中文界面
判断一个整数是否是回文数。不能使用辅助空间。

一些提示:
负整数可以是回文数吗?(例如 -1)
如果你打算把整数转为字符串,请注意不允许使用辅助空间的限制。
你也可以考虑将数字颠倒。但是如果你已经解决了 “颠倒整数” 问题的话,就会注意到颠倒整数时可能会发生溢出。你怎么来解决这个问题呢?
本题有一种比较通用的解决方式。

分析

提示给的蛮多了
首先负数肯定不是回文数了,0-9肯定是回文数
转成字符串的话就占用了额外的空间
联想之前的颠倒整数,其实思路是比较一致的,一样是反转。只不过面临越界问题。
我当时的方法(代码1)是用了long long,因为反正int的位数在那里,再怎么翻也不会超过long long
看到网上有比较机智的,只反转了一半,只不过要单独考虑10的倍数的情况,觉得很巧,一起附上该方法来自 https://blog.csdn.net/lisonglisonglisong/article/details/45701629
(不知为何后者运行时间居然还稍稍慢一点点)

代码1

//全翻转比较

bool isPalindrome(int x) {
       if (x < 0)return false;
    if (x >= 0 && x < 10)return true;
    long long temp=0;
    int xx = x;
    while (x!=0)
    {
        int n = x % 10;
        temp = temp * 10 + n;
        x /= 10;
    }
    if (temp == xx)return true;
    else return false; 
    }

代码2

if (x < 0 || x>0&&x%10==0)return false;
    if (x >= 0 && x < 10)return true;
    int temp=0;
    while (x>temp)
    {
        int n = x % 10;
        temp = temp * 10 + n;
        x /= 10;
    }
    if ((x == temp / 10) || (x == temp))return true;
    else return false;
    }

1个tip
处理回文数 翻转数 都是靠的取模和乘10运算

你可能感兴趣的:(算法,leetcode)