【LintCode】反轉整數
阿新 • • 發佈:2018-12-26
(1) 反轉一個只有3位數的整數。
i 注意事項
你可以假設輸入一定是一個只有三位數的整數,這個整數大於等於100,小於1000。
樣例
123 反轉之後是 321。
900 反轉之後是 9。
標籤
基本實現
相關題目
容易 反轉整數
【Java】
public class Solution {
/*
* @param number: A 3-digit number.
* @return: Reversed number.
*/
public int reverseInteger(int number) {
// write your code here
return number % 10 * 100 + number / 10 % 10 * 10 + number / 100;
}
}
(2)反轉整數
將一個整數中的數字進行顛倒,當顛倒後的整數溢位時,返回 0 (標記為 32 位整數)。
樣例
給定 x = 123,返回 321
給定 x = -123,返回 -321
標籤
整數
【分析】
遞迴。將傳入的n每次除以10,
定義temp:將每次獲取的n的個位數( n % 10)加到自己本身的個位(reversed_n*10 + n % 10)
狀態儲存:並將每次改變前的temp賦給reversedN。
判斷:改變後的temp/10 正常情況下應該等於改變前的temp,即reversedN。(需要在狀態儲存前,進行判斷!!!)
最終:n/10遞減,最終變為0。
最後一次遞迴時,n /= 10變為0。但不影響最後一次的判斷。
[想象再進行一次遞迴:temp加上的n%10等於0,保持不變。reversedN與變化前後的temp相等。此後,temp/10 != reversedN。不再滿足判斷條件。
故可得知,此判斷在正常遞迴時,應該一直為假。
但當顛倒後的整數溢位時,判斷為真,返回 0 ]
public class Solution {
/*
* @param n: the integer to be reversed
* @return: the reversed integer
*/
public int reverseInteger(int n) {
// write your code here
int reversed_n = 0;
while(n != 0){
int temp = reversed_n * 10 + n % 10;//將每次獲取的n的末位數( n % 10)加到自己本身的個位(reversed_n * 10 + n % 10)
n = n / 10;
if(temp / 10 != reversed_n){//出現了異常情況??
//注意判斷溢位,溢位返回0.
reversed_n = 0;
break;
}
reversed_n = temp;
}
return reversed_n;
}
}