1. 程式人生 > >【LintCode】反轉整數

【LintCode】反轉整數

(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; } }