数字の桁を反転
文字列反転と数学的アプローチを使って数字の桁を反転する方法を学びます。整数オーバーフローの考慮を伴う典型的なコーディング面接問題です。
Algorithms
詳細な説明
数字の桁の反転
数字の桁の反転は、文字列反転または純粋な数学で解ける典型的なアルゴリズム問題です。
文字列アプローチ
function reverseNumber(n) {
const sign = Math.sign(n);
const reversed = parseInt([...Math.abs(n).toString()].reverse().join(""));
return sign * reversed;
}
数学的アプローチ
function reverseNumber(n) {
const sign = Math.sign(n);
let num = Math.abs(n);
let result = 0;
while (num > 0) {
result = result * 10 + (num % 10);
num = Math.floor(num / 10);
}
return sign * result;
}
トレース例
1234を反転:
ステップ1: result = 0 * 10 + 4 = 4, num = 123
ステップ2: result = 4 * 10 + 3 = 43, num = 12
ステップ3: result = 43 * 10 + 2 = 432, num = 1
ステップ4: result = 432 * 10 + 1 = 4321, num = 0
整数オーバーフロー(LeetCodeクラシック)
固定サイズ整数の言語(C、Java)では、反転した数がオーバーフローする可能性があります。LeetCodeの問題では反転した数がオーバーフローした場合0を返すことが要求されます。
エッジケース
- 負の数: 符号を保持し、桁を反転
- 末尾のゼロ: 1200 → 21(反転した数の先頭ゼロは削除)
- 1桁: 同じ数を返す
- ゼロ: 0を返す
ユースケース
数字の桁反転はLeetCode(#7)、HackerRankなどのプラットフォームで最も人気のあるイージーレベルのコーディング面接問題の一つです。剰余演算、整数オーバーフロー処理、エッジケースの思考力をテストします。