难度:简单
描述
将一个整数中的数字进行颠倒,当颠倒后的整数溢出时,返回 0 (标记为 32 位整数)。
样例:
给定 x = 123,返回 321
给定 x = -123,返回 -321
给定 x = 1534236469, 返回 0
这题很简单,自己想一下!
这题很简单,自己想一下!
这题很简单,自己想一下!
给
你
点
时
间
想
一
下
解法:
- 最优:转字符串 再转数组进行操作
- 看到有人用四则运算+遍历反转整数,会把这个解法放到下面
提示:
整数溢出的值为Math.pow(2, 31) - 1
和Math.pow(-2, 31) + 1
,转为数字:2147483647
和-2147483647
这部分跟位操作符,二进制有关,有兴趣可以去搜下。
code:
转数组操作:
const reverseInteger = (n) => { if (n < 0) { n = n.toString().split('-')[1]; // 负数提取数字 n = '-' + [...n].reverse().join(''); n = +n; // 转数字 } else { n = n.toString(); // 转字符 n = +[...n].reverse().join(''); // 转为数组 颠倒数组 再合字符 最后转数字 } if (n >= Math.pow(2, 31) - 1 || n <= Math.pow(-2, 31) + 1) { // 判断溢出 return 0; } return n; }
遍历,一位一位颠倒:
const reverseInteger = function (n) { if (n === 0) return 0; let res = 0 while (n !== 0) { // 从个位起一位一位的颠倒 res = res * 10 + n % 10; n = parseInt(n / 10); // n除以10, 一位数转化完成 到最后小于1 被转成0 退出循环 } if (res >= 2147483647 || res <= -2147483647) { return 0; } return res; }
转数组操作运行效率也更高点:
github 算法仓库地址
2018.8.23