学習目標:
私はあなたに異なる思考の拡張をもたらすことを望んで、私のユニークなアルゴリズムのアイデアを更新し続けます!
役に立ったら、いいね、フォロー、サポートしてください!
あなたの励ましは私を動かし続けるものです!
!!!
歴口質問銀行質問7公式リンク
学習コンテンツ:
整数反転
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 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
著作権は著者に帰属します。商用の再版については、著者に連絡して許可を求め、非商用の再版については、出典を示してください。