007 - 整数反转(reverse-integer)
/*
* @Author: lvjingshuai
* @Date: 2019-07-13 15:29:55
* @Last Modified by: lvjingshuai
* @Last Modified time: 2019-08-06 14:52:06
*/
文章结构 |
---|
1、题目介绍 |
2、解题 |
2.1 解法 - 转字符串 |
2.2 解法 - reverse |
2.3 解法 - 数学算法 |
1、题目介绍
- 难度:简单 (系统学习算法与数据结构)
- 涉及知识:数组、数学
- 题目编号:007
- 题目地址:https://leetcode-cn.com/problems/reverse-integer/
- 题目内容:
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2的31次方, 2的31次方 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
2、解题
- leetCode题解:https://leetcode-cn.com/problems/reverse-integer/solution/zheng-shu-fan-zhuan-by-leetcode/
2.1 解法 - 转字符串。
解题思路:
-
将传入的数字
target
转换成字符串,并分割成数组。 -
遍历该数组,pop每次取最后一个数。
-
判断这个
result
是否超过题目限制,如果超过则变成 0 。
解题代码:
const reverse = function(target) {
let toArray = String(Math.abs(target)).split('');
let toString = '';
for (const i = 0; i < toArray.length; ) {
toString += toArray.pop();
}
let result = target > 0 ? Number(toString) : - Number(toString);
const upNum = Math.pow(2, 31) - 1;
const downNum = - Math.pow(2, 31)
if (result > upNum || result < downNum) {
result = 0;
}
return result;
};
测试:
- 输入:
target
:123
- 输出:
321
- [测试结果](https://leetcode-cn.com/submissions/detail/24934562/)
知识点:
String
:将其他值转成字符串。Number
:将其他值转成数字值。pop()
:pop()
方法从数组中删除最后一个元素,并返回该元素的值。此方法更改数组的长度。Math
:JS 中的内置对象,具有数学常数和函数的属性和方法。
2.2 解法 - reverse
解题思路:
-
将传入的数字
target
转换成字符串,并分割成数组。 -
reverse颠倒数组中元素的顺序。
-
判断这个
result
是否超过题目限制,如果超过则变成 0 。
解题代码:
const reverse = function(target) {
let toArray = String(Math.abs(target)).split('');
let result = toArray.reverse();
let toString = toArray.join('');
result = target > 0 ? Number(toString) : -Number(toString)
const upNum = Math.pow(2, 31) - 1;
const downNum = - Math.pow(2, 31)
if (result > upNum || result < downNum) {
result = 0;
}
return result;
};
测试:
- 输入:
target
:123
- 输出:
321
- [测试结果](https://leetcode-cn.com/submissions/detail/24938471/)
知识点:
Math
:JS 中的内置对象,具有数学常数和函数的属性和方法。reverse
:用于颠倒数组中元素的顺序。该方法会改变原来的数组,而不会创建新的数组。
2.3 解法 - 数学算法
解题思路:
-
我们初始化数值。
-
我们需要知道的是,一个数对 10 取余,可以得到这个数的个位数;一个数乘于 10 并加上一个个位数,可以将这个数字放到末尾。
-
我们判断一开始传入的数值正负,再返回对应结果即可。
解题代码:
const reverse = function(x) {
let result = 0;
let y = Math.abs(x);
while (y != 0) {
result = result * 10 + y % 10;
y = Math.floor(y / 10);
const upNum = Math.pow(2, 31) - 1;
const downNum = - Math.pow(2, 31)
if (result > upNum || result < downNum) {
result = 0;
y = 0;
}
}
return x > 0 ? result : -result;
};
知识点:
Math
:JS 中的内置对象,具有数学常数和函数的属性和方法。