题目
给定一个 32 位有符号整数,将整数中的数字进行反转。
示例 1:
1 | 输入: 123 |
示例 2:
1 | 输入: -123 |
示例 3:
1 | 输入: 120 |
注意:
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。
Given a 32-bit signed integer, reverse digits of an integer.
Example 1:
1 | Input: 123 |
Example 2:
1 | Input: -123 |
Example 3:
1 | Input: 120 |
Note:
Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [−231, 231 − 1]. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.
解题方法
转化为字符串反转
可以将整数转化为字符串,然后按[leetcode——[344]Reverse String反转字符串]来处理,然后再转化为long型整数,判断反转之后是否溢出。这段代码时间复杂度为O(n),n为整数的位数,跑了31ms,超过78.59%的java提交。
1 | class Solution { |
低位逐个进位
使用取余符号%获取整数个位,然后将整数除以10消去各位,循环遍历直至最后整数除以10取整为0,即遍历了每一个数字,每次遍历将原来获取的数字乘以10加上新取得的数字。为了防止整数溢出,结果用long型保留,每次加完新取得的数组进行判断。说的不清楚,还是直接看代码吧,这段代码时间复杂度为O(n),n为整数位数,跑了28ms,超过88.84%的java提交。
1 | class Solution { |