7.翻转整数
题目
Reverse digits of an integer.
Example1:
1 | x = 123, return 321 |
Example2:
1 | x = -123, return -321 |
分析
这是一道相当经典的算法题,题目本身不难,看你自己考虑的是否全面,需要考虑的有几个问题
- 变换数字问题,是由int转化为int,溢出问题如何避免与检测?
- 需要对整数的每一位进行提取,如何编写代码?
思路
面对上面的两个问题
- 首先,溢出问题的解决我们可以用一个long long型的变量来存放翻转过程的数,最后检查如果输出的结果溢出
(res > INT_MAX || res < INT_MIN)
,这边是我们滴水不漏版的答案。但是我们思考因为输入的x也是一个整型数,所以x的范围也应该在 -2147483648~2147483647 之间,那么x的第一位只能是1或者2,翻转之后res的最后一位只能是1或2,所以res只能是 2147483641 或 2147483642 都在int的范围内。但是它们对应的x为 1463847412 和 2463847412,后者超出了数值范围。所以当过程中res等于 214748364 时, 输入的x只能为 1463847412, 翻转后的结果为 2147483641,都在正确的范围内,所以不用check。这便是官方给出的精简版。 - 无论是哪个版本,提取每一位的方法都是一样的,顺序是从低位往高位取,例如123456,我们先对他进行取余=6,提取出最后一位,再把123456整体除以10,将最后一位抹去,循环往复。
代码
滴水不漏版
1 | class Solution { |
官方精简版
1 | class Solution { |
9.判断回文数
Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.
`Example 1:1
2Input: 121
Output: true
Example 2:1
2
3Input: -121
Output: false
Explanation: From left to right, it reads -121. From right to left, it becomes 121-. Therefore it is not a palindrome.
Example 3:1
2
3Input: 10
Output: false
Explanation: Reads 01 from right to left. Therefore it is not a palindrome.
Follow up:
Coud you solve it without converting the integer to a string?
分析
首先只要是负数就一定不是回文数,可以首先排除;然后就是找第1位和对应的第n位,这里提供了一种思路就是首先用n次循环计算出位数,然后 $\text{div}=10^n$,设立这个数的目的是为了找到前向位,后向位我们通过上面的翻转整数(取余)很快得到。
代码
1 | class Solution { |
个人总结
这两道题都是很经典的入门题,涉及到的只是不多
- int类型溢出判断
- 整数得到每一位数
这两个是很基础的知识,以后可能会经常用到,今天两道题不涉及特殊的数据结构,所以可说的不多,继续努力吧。感觉easy题以后要是明白的话没必要在往博客上写了。