【LeetCode從零單排】No.7 Reverse Integer

李博Garvin發表於2015-02-06

前話

      今天開始勵志刷一下leetcode上面的題目(還好這個網站沒被TG和諧)。從easy的開始,數一下差不多有40道,爭取兩個月搞定。

題目

       沒想到做的第一道題目,雖然看似簡單,卻費了很大週摺。

題目如下:

Reverse digits of an integer.

Example1: x = 123, return 321
Example2: x = -123, return -321


      剛看到這道題,首先蹦出的想法是把整數轉換為字串,然後前後位置換下再轉回int型,實事證明這樣是不可取的,因為當輸入的int型數字很大的時候,比如412851289525983,就會產生溢位,這樣在使用Integer.parseInt這種函式的時候會報錯,正確的做法是對數字進行int操作,利用取10的餘數獲得每位數字。下面展示下,錯誤答案和正確答案。

程式碼

1.正確解
public class Solution {
    public int reverse(int x) {
        int sum = 0;
        while (Math.abs(x) != 0)
        {
            if(Math.abs(sum) > Integer.MAX_VALUE / 10)
            {
                return 0;
            }
            sum = sum * 10 + x % 10;
            x = x / 10;
        }

        return sum;
    }
}


2.錯誤解
public class Solution {
    public int reverse(int x) {
     	 if(Math.abs(x)>100){
			 return 0;
		 }
		 else{
	     String x_str=Integer.toString(x);
	     char[] x_char = x_str.toCharArray();
	     String x_reverse_str="";
	     //System.out.print(Character.isDigit(x_char[0]));
	    if(Character.isDigit(x_char[0])){	    	 
	    	 for(int i=(x_str.length()-1);i>=0;i--){
	    		 x_reverse_str+=x_char[i];
	      	 }	    		 
	    	 }
	    else{
	    	  x_reverse_str+=x_char[0];
	    	  for(int i=(x_str.length()-1);i>=1;i--){
		    		 x_reverse_str+=x_char[i];
		    	 }	    	  	    	
	    }	    
	     return Integer.parseInt(x_reverse_str);}
		 
    }
}





/********************************

* 本文來自部落格  “李博Garvin“

* 轉載請標明出處:http://blog.csdn.net/buptgshengod

******************************************/



相關文章