iT邦幫忙

1

老肝哥-菜鳥Java的LeetCode歷程,第七題:Reverse Integer,朝遠大目標前進!

您最親愛的老肝哥上線了

今天老肝哥想延續昨日熱情,繼續刷刷LeetCode題目,想當然爾老肝哥這種菜雞都只能從Easy的題目解起
老肝哥看了下題目,只能以老肝哥直覺的方式解,跟網路上那些做法有很大的不同
果然菜雞與高手之間的差距非常大啊!

雖然最後還是有解出來就是了

7. Reverse Integer

題目描述為下:
Example 1:

Input: x = 123
Output: 321
Example 2:

Input: x = -123
Output: -321

老肝哥的理解為:把裡面的數字對調,有負數加上負數,就這樣

解答如下:

class Solution {
    public int reverse(int x) {
       
        try {
        	int tmpX = Math.abs(x);
        	String tmpStr = String.valueOf(tmpX);
        	char[] tmpC = tmpStr.toCharArray();
        	StringBuffer sb = new StringBuffer();
        
        	for(int i = (tmpC.length)-1;i>=0;i--){
        		sb.append(tmpC[i]);
        	}
        	String str=sb.toString();
        	if(x>0){
        		int num=Integer.parseInt(str);
        		x = num;
        		return x;
        	}else if(x<0) {
        		int num=Integer.parseInt(str);
        		x = -num;
        		return x;
        	}
		}catch(Exception e) {
        	return 0;
		}
		return 0;
             
    }
}

解釋如下:

老肝哥沒有上網查解答以前,思路就是把數字一個一個反著取出,再轉成數字,那就符合題目要求,
縱然前面有0,使用 Integer.parseInt 後,這個問題也能消除

首先使用Math.abs取回絕對值(去除負值),再來使用String.valueOf把數字轉成字串
字串類型內有個方法為toCharArray即取回char[],
後面跑個forloop反著append進StringBuffer內,
最後判斷小於0加上『 - 』號回傳,即完成題目

但真正困擾老肝哥的問題是,少了try catch區塊,LeetCode會丟 9646324351 進去測試,
題目開頭也有提到 『超出有符號的32位整數範圍,則返回。[-231, 231 - 1]0』

超出int的範圍了,老肝哥又老又肝又粗心,沒注意到這行,開心的寫完,submit後難受的看著錯誤提示

各位小夥伴切記呀~!


尚未有邦友留言

立即登入留言