leetcode:7. 整数反转

题目

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。

示例:

  1. 输入:x = 123
  2. 输出:321
  1. 输入:x = -123
  2. 输出:-321
  1. 输入:x = 120
  2. 输出:21
  1. 输入:x = 0
  2. 输出:0

解答 & 代码

越界的推导过程见:https://leetcode-cn.com/problems/reverse-integer/solution/zheng-shu-fan-zhuan-by-leetcode-solution-bccn/

  1. class Solution {
  2. public:
  3. int reverse(int x) {
  4. int result = 0;
  5. while(x != 0)
  6. {
  7. if(result < INT_MIN / 10 || result > INT_MAX / 10)
  8. return 0;
  9. int digit = x % 10;
  10. result = result * 10 + digit;
  11. x /= 10;
  12. }
  13. return result;
  14. }
  15. };

复杂度分析:

  • 时间复杂度 O([中等] 7. 整数反转 - 图1):翻转的次数即 x 十进制的位数
  • 空间复杂度 O(1):

执行结果:

  1. 执行结果:通过
  2. 执行用时:4 ms, 在所有 C++ 提交中击败了 41.95% 的用户
  3. 内存消耗:5.7 MB, 在所有 C++ 提交中击败了 95.05% 的用户