Likouブラッシング百日計画Day5整数反転

学習目標:

私はあなたに異なる思考の拡張をもたらすことを望んで、私のユニークなアルゴリズムのアイデアを更新し続けます!
役に立ったら、いいね、フォロー、サポートしてください!
あなたの励ましは私を動かし続けるものです!

歴口質問銀行質問7公式リンク


学習コンテンツ:

整数反転

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [231,  2311] ,就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号)。

例1:

入力:x = 123
出力:321
例2:

入力:x = -123
出力:-321
例3:

入力:x = 120
出力:21
例4:

入力:x = 0
出力:0

提示:

-231 <= x <= 231 - 1

ソース:LeetCode
リンク:https ://leetcode-cn.com/problems/reverse-integer

勉強の時間:

2022.1.11


学習出力:

アイデア1
ここに画像の説明を挿入

問題解決のアイデア

1.整数を逆にしたい場合は、逆の順序で出力するだけです。当然、文字列を使用して数値を格納し、逆の順序で配列をトラバースすることを考えますが、これは問題を複雑にします。以前はこれを行うのにかなりの時間がかかりましたが、振り返ってみると、それほど複雑である必要はありませんでした。だから、もっと考えてください!
2.毎回10の余りを取ることができ、余りの結果は正確に最後の桁、つまり逆の順序で出力する最初の桁になり、次に着信xを10で除算し、最後の桁を破棄します。桁さて、xが0になると、つまり
3つすべてが取り出されます。while
ループを書くことで4をトラバースできますが、非常にピットポイントがあり、Intデータの最大値は2の31乗-1です。最小値は負の2の31乗ですが、Intはその値を格納できないため、値を比較することはできません。ですから、9位になったら判断しなければなりません。最初の9位がそれより大きければ、最後の1位はまったく判断する必要がなく、直接一線を越えます。最初の9桁がそれと等しい場合、取り出した最後の桁が最大値より大きく、値が境界を超えているかどうかが長い間判断されます。

public class Solution {
    
    
    public int Reverse(int x) {
    
    
        int res = 0;
            int currentNumber = 0;
            while (x != 0)
            {
    
    
                currentNumber = x % 10;
                //为什么我们这里要比较前九位?而不是直接比较十位?因为十位会直接越界,所以比较前九位就行 
                if (res > 214748364 || (res == 214748364 && currentNumber > 7))
                {
    
    
                    return 0;
                }
                
                if (res < -214748364 || (res == -214748364 && currentNumber < -8))
                {
    
    
                    return 0;
                }

                res = res * 10 + currentNumber;
                x /= 10;
            }

            return res;
    }
}

著者:モルモットXiaohuihui
著作権は著者に帰属します。商用の再版については、著者に連絡して許可を求め、非商用の再版については、出典を示してください。

おすすめ

転載: blog.csdn.net/m0_48781656/article/details/122443344