题目
自己的核心思路介绍
先做一步判断,如果数字超出最大值或小于最小值 或为0, 都直接返回0。
利用数组反转的方法,对数字进行反转。具体做法 是,不管给出的数字是正还是负数,我们先假定给出的数字是正数,先num.toString()
转成字符串,然后用Array.from()
转成数组,再调用数组反转方法reverse()
,再用join('')
方法,转成字符串,最后用Number()
方法,强制转换为数字类型。
调用上述方法。同时对反转结果做个判断,如果反转结果超出了范围,就返回0.
最终代码
function reverse(x) {
if(x > (Math.pow(2, 31) - 1) || x < (- Math.pow(2, 31)) || x === 0) {
return 0;
}
// 这一步是核心算法 参数num为正数
function rev(num) {
return Number(Array.from(num.toString()).reverse().join(''));
}
if(x === Math.abs(x)) { // 给定的x是正数
if(rev(x) > (Math.pow(2, 31) - 1)) {
return 0;
}
return rev(x);
} else { // 给定的x是负数
if(rev(-x) * -1 < (- Math.pow(2, 31))) {
return 0;
}
return rev(-x) * -1;
}
}
结语
话说用js做算法题的,是真的少。后端语言占绝大多数。 大概是后端必考算法吧。。