整数反转
解题思路:
-
对 x 不断对 10 取余,然后除 10,直到为 0 即可;
-
每次计算出新的 result 前要注意判定边界条件,不满足就提前返回了;
-
最后在上面的过程中,不断对 result 先乘10后,再加 x 跟 10 的余数;
复杂度:
-
时间复杂度:O(log∣x∣),翻转的次数即 x 十进制的位数;
-
空间复杂度:O(1);
代码实现:
function reverse(x: number): number {
let res = 0;
// x 不断左移,最后一定是 0
while (x) {
//每次取末尾数字
let tmp = x % 10;
//判断是否 大于 最大32位整数(最大32位数字为 2147483647)
if (res > 214748364 || (res === 214748364 && tmp > 7)) {
return 0;
}
//判断是否 小于 最小32位整数(最小32位数字为 -2147483648)
if (res < -214748364 || (res === -214748364 && tmp < -8)) {
return 0;
}
res = res * 10 + tmp;
x = ~~(x / 10);
}
return res;
}
380.O(1) 时间插入、删除和获取随机元素(腾讯)
上一篇