LeetCode (Easy Part) Reverse Integer

題目:

Given a 32-bit signed integer, reverse digits of an integer.

給定一個32位有符號整數,整數的反轉數字。

Example 1:

Input: 123
Output:  321

Example 2:

Input: -123
Output: -321

Example 3:

Input: 120
Output: 21

Note:
        Assume we are dealing with an environment which could only hold integers within the 32-bit signed integer range. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.

        假設我們正在處理一個只能在32位有符號整數範圍內保持整數的環境。 出於此問題的目的,假設您的函數在反轉整數溢出時返回0。

思路:

        首先,我們把符號單獨拿出來,統一將數轉換成正數再做處理,處理後再加上符號位即可。接下來就是數的倒置,以前本科就接觸過這類問題的解決方法。最簡單的一種方法就是通過把該數除10取餘來得到數的最後一位,也就是倒置數的第一位。除10後把商賦值給這個數(下面代碼中該數是x)。然後依次取餘,將商賦值給x。倒置後的數就是依次將得到的餘數乘以10再加上下一次得到的餘數(代碼中倒置的數爲reversed)。直到x爲0,此時,reversed中的數即爲最後結果。這裏的reversed定義爲long類型,是爲了防止倒置後的數會越界的問題。最後再判斷reversed是否超出32位int型的範圍,若超出則返回0。

代碼:

public class Solution {
	public int reverse(int x){
		int sign=1;
		if(x<0){
			sign = -1;
			x = -x;			
		}
		long reversed = 0;
		for(;x>0;x/=10){
			reversed = reversed*10+x%10;
		}
		reversed*=sign;
		if(reversed>Integer.MAX_VALUE||reversed<Integer.MIN_VALUE){
			return 0;
		}else{
			return (int) reversed;
		}
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章