leetcode 7.整數反轉
阿新 • • 發佈:2020-08-23
看到這題最直接的思路,是想著先轉化為字串再反轉,然後轉化為整數輸出。轉化為輸出的時候需要考慮溢位的情況。而且如何對負數的字串進行處理每個人也有各自的方法。
以下記錄一個看到的題解比較清晰的實現
class Solution { public: int reverse(int x) { long result; //利用long避免溢位 if (x == INT_MIN) { return 0; } if (x < 0) { return-reverse(-x); } stringstream ss; ss << x; string tmpStr; ss >> tmpStr; int tmpStrSize = int(tmpStr.size()); string resultStr; for (int index = tmpStrSize - 1; index >= 0; index--) { resultStr.push_back(tmpStr[index]); } ss.clear();//使用前記得clear ss << resultStr; ss >> result; if (result > INT_MAX) { return 0; } return int(result); } }; 作者:pinku-2 連結:https://leetcode-cn.com/problems/reverse-integer/solution/zheng-shu-fan-zhuan-cshi-xian-liang-chong-jie-fa-z/ 來源:力扣(LeetCode) 著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。
另一種實現思路,不需要經過轉化。每次提取末尾數字放到開頭,同時檢查是否溢位。
class Solution { public: int reverse(int x) { int rev = 0; while (x != 0) { int pop = x % 10; x /= 10; if (rev > INT_MAX/10 || (rev == INT_MAX / 10 && pop > 7)) return 0; if (rev < INT_MIN/10 || (rev == INT_MIN / 10 && pop < -8)) return 0; rev = rev * 10 + pop; } return rev; } };