【算法-LeetCode】7. 整数反转(字符串;数组;取余)
作者:互联网
7. 整数反转 - 力扣(LeetCode)
文章起笔:2021年10月30日17:34:29
问题描述及示例
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例 1:
输入:x = 123
输出:321
示例 2:
输入:x = -123
输出:-321
示例 3:
输入:x = 120
输出:21
示例 4:
输入:x = 0
输出:0
提示:
-231 <= x <= 231 - 1
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
我的题解
我的题解1(字符串;数组;虽能通过,但不合题意)
这种思路很直接,就是把 x
先装换为字符串,然后分割为字符数组,将该字符数组进行翻转操作,然后根据情况进行去零添加负号的操作。最后返回拼接之后并转换为数字的结果。
/**
* @param {number} x
* @return {number}
*/
var reverse = function(x) {
let result = 0;
// 将x转为字符串,并分割为单个字符,同时进行翻转操作,存于numArr中
let numArr = x.toString().split('').reverse();
// 可能遇到 x=100 这类的情况,需要将反转之后首位零进行去除
while(numArr[0] === '0') {
numArr.shift();
}
// 如果x原先是负数,那么需要将负号放到首位
if(x < 0) {
numArr.unshift(numArr.pop());
}
// 将反转之后的结果进行拼接并转为整数,存在result中
result = parseInt(numArr.join(''));
// 如果result超出范围,则直接返回0,否则的话返回result
return result <= Math.pow(2,31)-1 && result >= -Math.pow(2,31) ? result : 0;
};
提交记录
执行结果:通过
1032 / 1032 个通过测试用例
执行用时:80 ms, 在所有 JavaScript 提交中击败了83.18%的用户
内存消耗:39.6 MB, 在所有 JavaScript 提交中击败了18.28%的用户
时间:2021/10/30 17:39
乍一看没啥问题,提交之后也能通过,但是题目中说了:假设环境不允许存储 64 位整数(有符号或无符号)。也就是说,如果在【将反转之后的结果进行拼接并转为整数,存在result中】这步中就发现结果溢出,那么就会报错了,而不会进行到之后的判断中。所以这种方法不符合题意。
我的题解2(取余)
通用一点的方法就是进行循环取余操作。不断地取 x
与 10
相除的余数,并将该余数不断拼接到反转后的结果的后面。这样就能完成反转操作了,当然,如果中途发现结果已经溢出了,那么就可以事先返回 0
。
/**
* @param {number} x
* @return {number}
*/
var reverse = function(x) {
let result = 0;
// remaining用来保存每次计算所得的余数
let remaining = 0;
// 不断对 x 取余,直到 x 降为0
while(x) {
remaining = x % 10;
// 将x末位去掉
x = (x - remaining) / 10;
// result后拼接刚才得到的余数
result = result * 10 + remaining;
// 如果发现当前结果已经溢出,则可以事先返回0
if((-Math.pow(2,31) > result) || (result > Math.pow(2,31)-1)) {
return 0;
}
}
// 如果反转后的结果在规定范围内,则将其返回
return result;
};
提交记录
执行结果:通过
1032 / 1032 个通过测试用例
执行用时:76 ms, 在所有 JavaScript 提交中击败了92.48%的用户
内存消耗:39.3 MB, 在所有 JavaScript 提交中击败了68.61%的用户
时间:2021/10/30 18:10
官方题解
更新:2021年7月29日18:43:21
因为我考虑到著作权归属问题,所以【官方题解】部分我不再粘贴具体的代码了,可到下方的链接中查看。
【更新结束】
更新:2021年10月30日17:45:46
【更新结束】
有关参考
暂无
标签:10,题解,反转,整数,算法,result,numArr,取余,LeetCode 来源: https://blog.csdn.net/qq_44879358/article/details/121053956