力扣hot100【Day3】


7. 整数反转

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号)。
在这里插入图片描述

解法一

在这里插入图片描述

  • 取最后一位数 + result * 10即可反转
  • 考虑到负数,循环结束的条件应该是 x != 0,而不是 x<0
  • 题目要求不允许存储64位数据,int为4字节,long为8字节,即不可以定义long型数据
  • java发生溢出不会报错,但是数据会发生变化,因此判断溢出的方法可以是将得到的数再除以10,看是否与原数相等,若相等则未溢出,不相等则溢出返回0

解法二

在这里插入图片描述

  • 先把特殊情况考虑出来,即再加是否会导致溢出

8. 字符串转换整数

请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。

函数 myAtoi(string s) 的算法如下:

读入字符串并丢弃无用的前导空格
检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。
读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。
将前面步骤读入的这些数字转换为整数(即,“123” -> 123, “0032” -> 32)。如果没有读入数字,则整数为 0 。必要时更改符号(从步骤 2 开始)。
如果整数数超过 32 位有符号整数范围 [−231, 231 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231 的整数应该被固定为 −231 ,大于 231 − 1 的整数应该被固定为 231 − 1 。
返回整数作为最终结果。
注意:

本题中的空白字符只包括空格字符 ’ ’ 。
除前导空格或数字后的其余字符串外,请勿忽略 任何其他字符。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

解法

在这里插入图片描述在这里插入图片描述

  • 先判断是否溢出再加到result上
  • 溢出的两种可能:【-512,511) (每次都是乘以10,因此溢出位为最后一位或者第二位)
  • 1)516在最后一位发生溢出,此时result = 51, 且 6 > 1
  • 2)521在倒数第二位发生溢出,此时result=52,直接判断MAX_VALUE / 10 与result的大小关系即可
  • -19 / 10 = -1
  • -19 % 10 = -9

9. 回文数

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。

回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

例如,121 是回文,而 123 不是。
在这里插入图片描述

解法

在这里插入图片描述

  • 如果是负数,则直接返回false
  • 如果是正数,则比较该数倒置后得到的数是否与原数相同,如果溢出则直接返回false

10. 正则表达式匹配

给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。

‘.’ 匹配任意单个字符
‘*’ 匹配零个或多个前面的那一个元素
所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。
在这里插入图片描述

解法

在这里插入图片描述
在这里插入图片描述

11. 盛最多水的容器

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。

找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

返回容器可以储存的最大水量。

说明:你不能倾斜容器。
在这里插入图片描述

解法

在这里插入图片描述

  • 采用双指针的方式,从两侧遍历数组
  • 左指针对应数值小时左指针右移,右指针对应数值小时右指针左移
  • 直至左右指针相遇停止循环
  • 当左指针小时,以左指针为边界的容器其所能达到的最大容量以求,因此之后不再考虑该指针为边界

12. 整数转罗马数字

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

字符 数值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
给你一个整数,将其转为罗马数字。

在这里插入图片描述

解法

在这里插入图片描述

  • 利用符号表表示所有符号
  • 从符号表中最大的数开始循环,只要可以分解出一个大数对应的符号就添加到StringBuffer类中,添加完之后用num减掉大数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值