パリンドロームの処理方法

ソリューション1:一般的なソリューション

最善の解決策は、最初に整数を文字列に変換してから、文字列を配列に分割することです。対応する要素が等しいかどうかを判断するには、配列の長さの半分だけループする必要があります。
ここに画像の説明を挿入
コード実装
Java

///简单粗暴,看看就行
class Solution {
    public boolean isPalindrome(int x) {
        String reversedStr = (new StringBuilder(x + "")).reverse().toString();
        return (x + "").equals(reversedStr);
    }
}

ソリューション2:高度なソリューション-数学的ソリューション

比較のために整数の対応する数値を取得するために、四捨五入と剰余演算を行います。

例:番号1221。

1221/1000を計算すると、最初の
ビット1が得られます。1221 %10を計算すると、最後のビット1
が比較され
、22が取り出されて比較が続行されます。
ここに画像の説明を挿入
コード実装
Java

class Solution {
    public boolean isPalindrome(int x) {
        //边界判断
        if (x < 0) return false;
        int div = 1;
        //
        while (x / div >= 10) div *= 10;
        while (x > 0) {
            int left = x / div;
            int right = x % 10;
            if (left != right) return false;
            x = (x % div) / 10;
            div /= 100;
        }
        return true;
    }
}

ソリューション3:高度なソリューション-独創的なソリューション

パリンドロームの数を直観的に見ると、それらを1対1で対応しているかどうかを確認するために、数を2つに折るような感覚です。

したがって、このソリューションの操作は、数値の後半を取り出して反転することです。

ここで注意すべき点は、パリンドロームの数は奇数または偶数になる可能性があるため、長さが偶数の場合、半分に折りたたむと等しくなるはずです。長さが奇数の場合は、半分に折りたたんだ後、 1つの長さを削除するには、1桁を削除する必要があります(10で割り、丸めます)。

具体的な方法は次のとおりです。

剰余演算(%10)が実行されるたびに、最小数が取り出されます:y = x%10
取り出された数の最後に最小数が追加されます:revertNum = revertNum * 10 + y
取り出された最小桁ごとに、xは
xがrevertNumより小さいかどうか判断するために10で除算します。xがrevertNumより小さい場合、それは数が半分または半分以上であることを意味します。
最後に、パリティを決定します。偶数の場合、revertNumとxは等しく、奇数の場合は中央の数revertNumの最下位ビットで、それを10で割ると、xと等しくなるはずです。
ここに画像の説明を挿入
コードの実装

class Solution {
    public boolean isPalindrome(int x) {
        //思考:这里大家可以思考一下,为什么末尾为 0 就可以直接返回 false
        if (x < 0 || (x % 10 == 0 && x != 0)) return false;
        int revertedNumber = 0;
        while (x > revertedNumber) {
            revertedNumber = revertedNumber * 10 + x % 10;
            x /= 10;
        }
        return x == revertedNumber || x == revertedNumber / 10;
    }
}

元の記事を8件公開 Likes2 訪問数492

おすすめ

転載: blog.csdn.net/qq_42003546/article/details/102689053
おすすめ