leetcode 2---Reverse Integer,reverseinteger

來源:互聯網
上載者:User

leetcode 2---Reverse Integer,reverseinteger

題記:

       由於臨近畢業要找工作,雖然看了一遍資料結構和演算法,但是總感覺心裡發虛。而且項目中所接觸到得編程都是基於其他方面得改進演算法,總之本人編程能力有限,經常被人鄙視,所以下定決心,慢慢爬行,一點點刷leetcode,這也是寫這些部落格得緣由,記錄在遇到題目時得分析思路,及解決方案。

                                                                                                                                                                                    ----------     我走的慢,但我從不後退。

===============================================================================================================

題目:

Reverse digits of an integer.

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

----

愚解:

看到這個題目不要上來動手寫程式,為什嗎?因為你沒有考慮周全,如果上來就寫,在寫程式得過程中會發現很多情況,就會卡在那裡。應該分析,主要有一下幾點;

1.如果末尾是0改怎麼輸出,如10 ,100,

2. 所要重點注意得溢出,因為int類型不管有無符號都有其邊界值,超過邊界值時就會溢出,如1000000003 ,本題目假的溢出時返回結果為0

從分析來看,該題目重點考察的時對溢出情況得處理,那麼對於一個整數,我們很容易取得各位上得數字,但是如何判斷將它反轉是否溢出呢,這個問題我也了好久,也嘗試了幾種方法,但我覺最可靠得是下面得一種思路。對於一個整數,不管它是正還是負,如果翻轉之後不溢出得話,那麼翻轉前得數字應該與翻轉後得數字相同,如 : 翻轉前 123,翻轉後 321 ,如果不溢出,那麼翻轉後最高位上得數字必須等於翻轉前最低位上得數字,一旦不相同,那麼在翻轉得過程中肯定出現了溢出,可以直接 return 0 處理。明白了這個道理,那麼代碼新手拈來:

/*************************************************************************    > File Name: reverseInteger.cc    > Author: Jerry Shi    > Mail: jerryshi0110@gmail.com     > Created Time: 2014年12月28日 星期日 10時43分39秒 ************************************************************************/#include<iostream>#include<cstdlib>using namespace std;class Solution{public:int reverse(int x){int sign = (x < 0) ? -1 : 1;x = abs(x);            char buf[12]; //max length of int is 10int i = 0;int j = 0;int result = 0;            int temp;//get signwhile(x){buf[i] = x % 10;x /= 10;result = result*10 + buf[i];++i;}            temp = result;while(i){if(temp % 10 !=  buf[i-1]){return 0;}temp /= 10;--i;}return sign * result;}};int main(void){int test = 1534236469;Solution mtest;int result;result = mtest.reverse(test);cout << "inverse result: " << result << endl;return 0;}
提交代碼之後,測試通過,測試結果時用時 60ms,上述得代碼可以更精簡,但主旨得解決方案不變。後來又看討論區中大家得方法,基本都是採用上述分析得方法去判斷是否溢出,還有一個時用一個int64得變數來接收翻轉後得結果,然後與INT_MAX和INT_MIN進行比較判斷是否溢出,此方法針對此種情形可以解決問題,但若給定得uint64,則行不通。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.