博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode] [C++] 7. Reverse Integer 整数翻转
阅读量:5085 次
发布时间:2019-06-13

本文共 2773 字,大约阅读时间需要 9 分钟。

题目要求


Reverse digits of an integer.

Example1: x = 123, return 321

Example2: x = -123, return -321
Note:
The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed integer overflows.

问题描述


翻转整数数中的所有数字。例如输入123,输出321,输入-123,输出-321.

注意:输入为32位有符号整数,如果转换后数字溢出,则直接返回0.

思路分析


通过bool值判断是否为负数,然后将负数转换为正数。再将正数的每一个数字进行vector

保存。然后先通过判断vector中每个数字判断是否会反转溢出。

代码验证

class Solution {public:    int reverse(int x) {       if (x == -2147483648) {           return 0;       }              bool minus = false;       if (x < 0) {           minus = true;           x = -x;       }              vector
nums; while (x) { int digit = x % 10; nums.push_back(digit); x /= 10; } if (nums.size() == 10) { if (nums[0] > 2) { return 0; } else if (nums[0] == 2 && nums[1] > 1) { return 0; } else if (nums[0] == 2 && nums[1] == 1 && nums[2] > 4) { return 0; } else if (nums[0] == 2 && nums[1] == 1 && nums[2] == 4 && nums[3] > 7) { return 0; } else if (nums[0] == 2 && nums[1] == 1 && nums[2] == 4 && nums[3] == 7 && nums[4] > 4) { return 0; } else if (nums[0] == 2 && nums[1] == 1 && nums[2] == 4 && nums[3] == 7 && nums[4] == 4 && nums[5] > 8) { return 0; } else if (nums[0] == 2 && nums[1] == 1 && nums[2] == 4 && nums[3] == 7 && nums[4] == 4 && nums[5] == 8 && nums[6] > 3) { return 0; } else if (nums[0] == 2 && nums[1] == 1 && nums[2] == 4 && nums[3] == 7 && nums[4] == 4 && nums[5] == 8 && nums[6] == 3 && nums[7] > 6) { return 0; } else if (nums[0] == 2 && nums[1] == 1 && nums[2] == 4 && nums[3] == 7 && nums[4] == 4 && nums[5] == 8 && nums[6] == 3 && nums[7] == 6 && nums[8] > 4) { return 0; } else if (nums[0] == 2 && nums[1] == 1 && nums[2] == 4 && nums[3] == 7 && nums[4] == 4 && nums[5] == 8 && nums[6] == 3 && nums[7] == 6 && nums[8] == 4 ) { if (minus && nums[9] > 8) { return 0; } if (!minus && nums[9] > 7) { return 0; } } } int ret = 0; for (int i = 0; i < nums.size(); ++i) { ret = ret * 10 + nums[i]; } if (minus) { ret = -ret; } return ret; }};

总结注意


处理各种badcase:

  1. x = -2147483648 直接返回0.
  2. 翻转后的数字x > 2147483647.其实就是判断vector中每一个数字是否超出限度。例如vector[0],
    翻转后会会处于整数最高位,如果整数位数等于10位,则翻转后必定溢出。

原创声明


作者:hgli_00

链接:
来源:博客园
著作权归作者所有,转载请联系作者获得授权。

转载于:https://www.cnblogs.com/lihuagang/p/leetcode_7.html

你可能感兴趣的文章
关于退出当前页面在火狐的一些问题
查看>>
【项目实施】项目考核标准
查看>>
spring-aop AnnotationAwareAspectJAutoProxyCreator类
查看>>
经典入门_排序
查看>>
Redis Cluster高可用集群在线迁移操作记录【转】
查看>>
二、spring中装配bean
查看>>
VIM工具
查看>>
javascript闭包
查看>>
@Column标记持久化详细说明
查看>>
创建本地yum软件源,为本地Package安装Cloudera Manager、Cloudera Hadoop及Impala做准备...
查看>>
mysql8.0.13下载与安装图文教程
查看>>
站立会议08(冲刺2)
查看>>
url查询参数解析
查看>>
http://coolshell.cn/articles/10910.html
查看>>
[转]jsbsim基础概念
查看>>
DIV和SPAN的区别
查看>>
第一次使用cnblogs
查看>>
C#语法糖之 session操作类 asp.net
查看>>
2015 Multi-University Training Contest 3
查看>>
使用Gitblit 在windows 上部署你的Git Server
查看>>