这道题我觉得应该用二进制位移来做比较快,但是懒得想了就写了一个最普通的方法:
static const auto io_speed_up = []() { std::ios::sync_with_stdio(false); cin.tie(nullptr); return 0; }(); class Solution { public: int reverse(int x) { long long temp = 0; do temp = temp * 10 + x % 10; while (x /= 10); return (temp > INT_MAX || temp < INT_MIN) ? 0 : temp; } };
结果超过了99.69%,真滴好奇比这个还慢的是怎么做的。之所以说这个最简单,是因为从返回型为int和要求64位可以得到LeetCode的测试实在64位机的,这样就可以直接用longlong类型计算然后判断是否不在INT范围之内(64位机int范围即为题目规定范围),不在返回0即可。
我看了排第一的算法,感觉与我无太大差别,仅是他计算的时候把负数转换成了正数,我试着把自己的改为正数,发现速度并没有变化。我复制了排第一的算法进行计算,发现得出时间并不快于我的,我猜测是否LeetCode在不同提交时间,速度会不一样?