Leetcode 7 反转整数Reverse Integer
给定一个 32 位有符号整数,将整数中的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。
============================================================================================================
基本思路:
对传入的整数判断,大于零可以直接处理,小于零处理0-x,输入超出范围直接return 0;
用是sstream来实现整形和字符串间相互转化: gate:https://www.cnblogs.com/mckc/p/9671017.html
将字符串翻转后再转化为整形输出
转化为整形后记得判断整形是否超过32位,按题目要求,超过就return 0;
转化可以直接用algorithm里面的reserve函数,也可以自己用for来对调;
下面是ac代码:
class Solution { public: int reverse(int x) { stringstream ss; string s1,s2; int y; if(x>2147483647||x<-2147483647) return 0; if(x<0){ ss<<x; ss>>s1; for(auto s=s1.end()-1;s!=s1.begin()-1;s--){ s2+=*s; } ss.clear(); ss<<s2; ss>>y; if(y>=2147483647) return 0; return y=0-y; } else{ ss<<x; ss>>s1; for(auto s=s1.end()-1;s!=s1.begin()-1;s--){ s2+=*s; } ss.clear(); ss<<s2; ss>>y; if(y>=2147483647) return 0; return y; } }
};
或者用reserve:
class Solution { public: int reverse(int x) { stringstream ss; string s1; int y; if(x>2147483647||x<-2147483647) return 0; if(x<0){ ss<<x; ss>>s1; std::reverse(s1.begin(),s1.end()); ss.clear(); ss<<s1; ss>>y; if(y>=2147483647) return 0; return y=0-y; } else{ ss<<x; ss>>s1; std::reverse(s1.begin(),s1.end()); ss.clear(); ss<<s1; ss>>y; if(y>=2147483647) return 0; return y; } } };