LeetCode-7小結

此題在地鐵上用手機做的,事實證明用手機寫代碼的體驗巨差。

        乍看很簡單,審題、思考加完成編碼大概3分鐘的樣子,提交後報錯,然後又出現溢出的情況。後經思考,數在滿足一定條件下逆序是會溢出的,與強轉整型似乎是同一個道理。可這與平時經常接觸的無符號整型又有不同,溢出的數據並不是我們熟悉的4294967295,而是他的一半加,費了一些周折,找到了key點:在第九位時就要警惕它是否會超過其前九位的限制,即214748364,如果沒有超過,第十位賦值時再判斷是否超過其個位數7,這下就OK了。


關鍵算法在於找到判斷溢出的位置與方法。


int reverse(int x) {
    int sum = 0;
    while(0 != x)
    {
        if(0 == x/10 && abs(sum) >= 214748364)
        {
            if(abs(sum) > 214748364)
                return 0;
            else if(x > 7)
                return 0;
        }
        sum = sum*10 + x%10;
        x /= 10;
    }
    return sum;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章