题目:翻转整数

这道题我觉得应该用二进制位移来做比较快,但是懒得想了就写了一个最普通的方法:

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在不同提交时间,速度会不一样?

猜你喜欢

转载自www.cnblogs.com/change4587/p/9170487.html