LeetCode題庫整理【Java】—— 7整數反轉

pdh慎行發表於2020-10-24

LeetCode題庫整理【Java】

7.整數反轉

題目:給出一個32位的有符號整數,你需要將這個這個整數中每位上的數字進行反轉。
示例1
輸入: 123
輸出: 321
示例2:
輸入: -123
輸出: -321
示例3:
輸入: 120
輸出: 21
注意:

假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 [−2^31, (2^31) −1]。請根據這個假設,如果反轉後整數溢位那麼就返回 0。

思路:用一個StringBuilder(字串生成器)型別的變數來儲存數字中每一位上的值,通過對輸入的int型數值採用取餘的方式依次取出最後一位數字,陣列越界的話使用 Integer.parseInt()會丟擲異常,從而達到陣列越界的判斷

完整的Java測試程式碼如下:

public class IntegerInversion {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int num=-123;
		IntegerInversion reversion=new IntegerInversion();
		reversion.reverse(num);
	}
	public int reverse(int x) {
		StringBuilder str=new StringBuilder();
		if(x<0) {  //儲存負號,使x變為絕對值大小
			str.append('-');
			x = -x;
		}
		while(x>0) {
			str.append( x%10 );//逐次將x的最後一位數字加進str中
			x/=10;//取整
		}
		System.out.println(str);
		//用Integer.parseInt()函式丟擲異常來判斷反轉後的字串化為整型後是否越界
		try {
			return Integer.parseInt(str.toString());
		}catch(Exception e) {
			return 0;
		}
	}
}

顯然,這種方法只遍歷了一遍原來的數字,時間複雜度是O(n),n為輸入數字的位數(包含負號)。至於空間複雜度,由於只用了一個長度為n的StringBuilder型別的變數,因此空間複雜度是O(n)。
在這裡插入圖片描述

參考博文LeetCode007——反轉整數https://blog.csdn.net/qq_41231926/article/details/81915741
:有一些博主使用long型別變數來儲存轉換後的結果進而判斷是否越界,我覺得不符合題目中 “只能儲存得下 32 位的有符號整數” 的假設,32位有符號整數應該是將資料型別限制為了int型, 所以我覺得不能使用long, 當然,此意見僅供參考。

相關文章