7:整数反转(C++) |
您所在的位置:网站首页 › 姚明插画 › 7:整数反转(C++) |
题目地址:https://leetcode-cn.com/problems/reverse-integer/ 题目描述给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。 题目示例示例 1: 输入: 123输出: 321示例 2: 输入: -123输出: -321示例 3: 输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。 解题思路思路1:逆序累加处理,需要注意的是逆序结果可能出现溢出情况,为避免此种情况,使用long long类型存储反转结果,并对大于上限和下限值返回0,同时,因为负数取模结果还是负数,所以无需额外处理,时间复杂度O(logn)。 思路2:整数转换字符串处理,利用to_strin()函数将整数x转换为字符串s,然后使用反转函数reverse()将除过符号位的数字进行反转,最后进行溢出判断即可。 程序源码思路1 class Solution { public: int reverse(int x) { long res = 0; while(x) { res = res *10 + x % 10; x /= 10; } if(res < INT_MIN || res > INT_MAX) return 0; return res; } };思路2 class Solution { public: int reverse(int x) { long res; string s = to_string(x); int pos = s.find_first_not_of('-'); //在字符串s中寻找第一个不以'-'字符开始的位置 std::reverse(s.begin() + pos, s.end()); //对字符串是种除符号位的其它字符进行反转操作, istringstream cout(s); cout >> res; //将string类型反转结果转换为long类型并输出到res中 if(res > INT_MAX || res < INT_MIN) return 0; //溢出判断 return res; } }; |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |