最近打算练习写代码的能力,所以从简单题开始做。

大部分还是用C语言来解决。

@

题目

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例 1:

输入: 123

输出: 321

示例 2:

输入: -123

输出: -321

示例 3:

输入: 120

输出: 21

注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

具体链接 https://leetcode-cn.com/problems/reverse-integer/

思路

其实这算很基础的问题了,首先就是想到利用循环结构,整数除法和取余来解决。但也会遇到边界值的问题,就要小心了。

初步想法

初步的想法就是用一个while循环,在循环里面解决取余和倒序相加的工作。

具体代码如下:

int reverse(int x) {
int num = 0;
while (x)
{
num = num * 10 + x % 10;
if (num > INT_MAX || num < INT_MIN)//边界值判断
return 0;
x = x / 10;
}
return num;
}

但是这种结构很容易遇到一个问题,就是当num达到边界时,再进行*10的运算就会溢出了,但判断在运算之后。

但是我又想到在C语言中还有long int类型,所以只要定义num为long int即可。

最后也通过了,代码如下:

int reverse(int x) {
long int num = 0;
while (x)
{
num = num * 10 + x % 10;
if (num > INT_MAX || num < INT_MIN)
return 0;
x = x / 10;
}
return num;
}

总结:这种改善也只是一种取巧的方法,当数据更大时就没办法了,而且会浪费很多空间。

进一步想法

于是我看了官方题解,发现官方是通过判断num与边界值的距离来避免溢出的。

我首先将if判断进行了替换,但发现还是不能通过,因为最小的边界还是会溢出,然后我发现官方题解中是先判断再进行倒序操作的,这样就可以有效解决问题了。

int reverse(int x) {
int num = 0;
while (x)
{ if (num > INT_MAX/10 || (num == INT_MAX / 10 && (x%10) > 7)) return 0;
if (num < INT_MIN/10 || (num == INT_MIN / 10 && (x%10) < -8)) return 0;
num = num * 10 + x % 10;
x = x / 10;
}
return num;
}

我觉得这个方法要求的判断条件太细致了,然后去网上看了看其他人的解法。有博主提到利用反推法判断是否溢出,但其实这种方法也是先计算再判断的。

具体链接 https://blog.csdn.net/bingkuoluo/article/details/83046469

我尝试提交后发现仍然会面临最大值溢出的问题,也不够安全,暂时没有找到更好的办法。

总结

注意语句的顺序问题,尤其是判断语句和判断条件的运算的问题。

要考虑数据的溢出问题。

在本题中,还是要先判断,再运算。

【LeetCode】 #7:反转整数 C语言的更多相关文章

  1. LeetCode 4.反转整数

    给定一个 32 位有符号整数,将整数中的数字进行反转. 示例 1: 输入: 123 输出: 321  示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: 21 注意: ...

  2. LeetCode 7. 反转整数(Reverse Integer)

    题目描述 给定一个 32 位有符号整数,将整数中的数字进行反转. 示例 1: 输入: 123 输出: 321  示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: 21 ...

  3. Leetcode 7.反转整数 By Python

    给定一个 32 位有符号整数,将整数中的数字进行反转. 示例 1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: 21 注意: 假 ...

  4. leetcode记录-反转整数

    给定一个 32 位有符号整数,将整数中的数字进行反转. 示例 1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: 21 注意: 假 ...

  5. Leetcode 7 反转整数Reverse Integer

    给定一个 32 位有符号整数,将整数中的数字进行反转. 示例 1: 输入: 123 输出: 321  示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: 21 注意: ...

  6. 【LeetCode题解】7_反转整数

    目录 [LeetCode题解]7_反转整数 描述 方法一 思路 Java 实现 类似的 Java 实现 Python 实现 方法二:转化为求字符串的倒序 Java 实现 Python 实现 [Leet ...

  7. leetcode每日一题——反转整数

    题目: 反转整数 难度: 简单 描述: 给定一个 32 位有符号整数,将整数中的数字进行反转. 解法: class Solution { public int reverse(int x) { //i ...

  8. LeetCode刷题--整数反转(简单)

    题目描述 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: 12 ...

  9. C#版(击败97.76%的提交) - Leetcode 557. 反转字符串中的单词 III - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. Leetcod ...

随机推荐

  1. Maven配置文件POM属性最全详解

    注:本文内容来源于: BlueKitty1210 <Maven配置文件POM属性最全详解> <project xmlns="http://maven.apache.org/ ...

  2. A#G/C013

    A#G/C013 A Sorted Arrays 不会/kk B Hamiltonish Path 我是傻逼 如果一条路径不合法,那么把不合法的端点向没出现过的相邻点连过去救星了 C Ants on ...

  3. 灰度图像--图像分割 Prewitt算子

    学习DIP第45天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan,欢迎大家转载,发现博客被某些论坛转载后,图像无法正常显示,无法正常表达本人观点,对此表示很不 ...

  4. 数据结构Java版之基数排序(四)

    基数排序: 基数排序分为两种:第一种是LSD ,从最低位开始排序, 第二种是 MSD 从最高位开始排.这里介绍第一种LSD排序算法. 首先,我们先了解什么是基数.基数是根据具体的排序情况而定的,比如我 ...

  5. 【Gamma】Scrum Meeting 4

    目录 写在前面 进度情况 任务进度表 Gamma阶段燃尽图 照片 写在前面 例会时间:5.31 22:30-23:00 例会地点:微信群语音通话 代码进度记录github在这里 临近期末,团队成员课程 ...

  6. [BUAA 软工]提问回顾与个人总结

    项目 内容 这个作业属于哪个课程 北航软工 这个作业的要求在哪里 提问回顾与个人总结 我在这个课程的目标是 学习如何以团队的形式开发软件,提升个人软件开发能力 这个作业在哪个具体方面帮助我实现目标 督 ...

  7. 反射调用异常InvocationTargetException和代理类抛出异常

    反射调用方法,如果方法抛出异常,会被包装成InvocationTargetException. 如果反射对象被代理了,在代理类中抛出异常,不会被包装成InvocationTargetException ...

  8. Asp.Net Core Cookie使用,Asp.net Core Cookie操作失效

    注:本文主要介绍Asp.net Core 3.0后增加cookie代理功能. 默认是增加了的. 默认增加的这个有些问题所在, 1.原来设置cookie方式将不可用,需要按照代理方式设置 2.对于ses ...

  9. fdisk、mkfs.ext4、make_ext4fs、img2simg、simg2img

    一个典型的嵌入式系统是由uboot+kernel+rootfs组成的,其中uboot和kernel都是二进制,rootfs存在文件系统. 二进制在烧录的时候比较简单,将二进制数据写入存储设备固定地址: ...

  10. thinkphp项目部署在phpstudy里的nginx上

    朋友的一个thinkphp做的项目,让我帮他部署一下的,LINUX服务器,用宝塔. 第一台服务器,装上宝塔,宝塔里装NGINX,PHP5.6,再建立网站,绑定域名,访问成功,一切正常! 昨天试着给另一 ...