一、題目名稱java
Reverse Integer(翻轉數字)git
二、題目地址ui
https://leetcode.com/problems/reverse-integer/code
三、題目內容leetcode
英文:Reverse digits of an integer.開發
中文:翻轉一個正整數的各位,造成一個新數字字符串
例如:x = 123, return 321;x = -123, return -321get
四、一個有瑕疵的方法(不能AC)it
一個比較好想到的方法,是先將輸入的數字轉換爲字符串,再將字符串翻轉後轉換爲數字。這個方法對於通常的數字來講是可行的,它的缺點是面對一些很是大的整數時,若是翻轉會形成溢出,不能進行判斷。Java代碼以下:io
/** * 功能說明:LeetCode 7 - Reverse Integer * 開發人員:Tsybius * 開發時間:2015年9月20日 */ public class Solution { /** * 反轉數字 * @param x 被反轉數字 * @return 反轉後數字 */ public int reverse(int x) { if (x == 0) { return 0; } String str = String.valueOf(x >= 0 ? x : -x); str = (new StringBuilder(str)).reverse().toString(); if (x > 0) { return Integer.parseInt(str); } else { return Integer.parseInt("-" + str); } } }
五、解題方法
一個比較保險的方法,就是計算的時候採用long類型,計算完畢後再看是否超過了整型的上界或下界,超過了則返回整型的最大值或最小值,不然直接強制轉換爲整型後返回便可。Java代碼以下:
/** * 功能說明:LeetCode 7 - Reverse Integer * 開發人員:Tsybius * 開發時間:2015年9月20日 */ public class Solution { /** * 反轉數字 * @param x 被反轉數字 * @return 反轉後數字 */ public int reverse(int x) { if (x == 0) { return 0; } //先轉換爲正整數計算 boolean sign = x > 0 ? true : false; x = sign ? x : x * (-1); //使用長整型類型計算結果,防止溢出錯誤 long result = 0L; while (true) { result += x % 10; x /= 10; if (x != 0) { result *= 10; } else { break; } } //得出結果,比較是否超出整型最大/最小值 result = sign ? result : result * (-1); if (result > Integer.MAX_VALUE || result < Integer.MIN_VALUE) { return 0; } else { return (int)result; } } }
這個方法的代碼還能夠被進一步精簡,下面這段代碼減小了代碼行數:
/** * 功能說明:LeetCode 7 - Reverse Integer * 開發人員:Tsybius * 開發時間:2015年9月20日 */ public class Solution { /** * 反轉數字 * @param x 被反轉數字 * @return 反轉後數字 */ public int reverse(int x) { long result = 0; while (x!=0) { result = result * 10 + x % 10; x /= 10; } return (result > Integer.MAX_VALUE || result < Integer.MIN_VALUE) ? 0 : (int)result; } }
END