致力于找到最简洁的解题方法
Eromanga_Sensei——Izumi Sagiri
- 整体思路是这样的:由于反转后的数可能超过int存储范围,所以先裁掉一位,余下的数字与十分之一的int最大值或最小值比较,再看余下的一位数。
- 能不用循环就不用循环,能用库函数就用库自带的
- 讲解所用函数
string to_string(int n): 将int转换为string类型,返回string
reverse(begin, end): 将begin和end之间所有的元素反转次序,重新安排指针
string string.substr(int pos, int n):返回从pos开始的n个字符的字串
int atoi(char *):将规整的char *转换为int类型
char * string.c_str():将string类型的字符串返回为char *
- 代码如下
class Solution {
public:
int reverse(int x) {
if(x == 0) return 0;
int Min = -2147483648, Max = 2147483647, Ans = 0;
string s = to_string(x);
std::reverse(s.begin(), s.end());
if(x < 0) {
string p = s.substr(0, s.size() - 2);
if(-1 * atoi(p.c_str()) < Min / 10 || (atoi(p.c_str()) == Min / 10 && s[1] > '8')) return 0;
} else {
string p = s.substr(0, s.size() - 1);
if(atoi(p.c_str()) > Max / 10 || (atoi(p.c_str()) == Max / 10 && s[0] > '7')) return 0;
}
x < 0 ? Ans = -1 * atoi(s.substr(0, s.size() - 1).c_str()) : Ans = atoi(s.substr(0, s.size()).c_str());
return Ans;
}
};
网友评论