LeetCode:9回文数C++


説明
はい、このように突然leetcode-cnに切り替えて、全中国語のインタフェースになって1つの整数が回文数であるかどうかを判断しました.補助スペースは使用できません.
いくつかのヒント:負の整数は文の数に戻ることができますか?(例-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乗算によるものである