原题链接:leetcode7
题目描述:整数反转,包括负数
思路:
思路一:按照位置处理的话,首尾的位置和为len-1,则位置i会和位置len-1-i 元素进行交换。首先会转为字符串进行处理,负数的符号单独处理,然后再转为数值
思路二:从低位到高位逐位处理 得到
/**
* @param {number} x
* @return {number}
*/
var reverse = function (x) {
if (x == 0) return x
let leftMaxVal = -Math.pow(2, 31)
let rightMaxVal = Math.pow(2, 31) - 1
let res = 0
while (x !== 0) {
res = res * 10 + (x % 10)
// 对于正数使用Math.floor 对于负数要使用Math.ceil所以要对正负数分别处理
// x = Math.floor(x / 10)
// 按位取反 会去掉小数点部分,因为按位取反要求的是整数
x = ~~(x / 10)
}
return (res < leftMaxVal || res > rightMaxVal) ? 0 : res
};
let x = -123
// x = 123
console.log(reverse(x))
function reverseInt(x) {
if (x == 0) return 0
let leftMaxValue = -Math.pow(2, 31)
let rightMaxValue = Math.pow(2, 31) - 1
let figer = true
let reverValue
let arr = []
if (x < 0) {
figer = false
x = -x
}
while (x) {
arr.push(x % 10)
x = Math.floor(x / 10)
}
reverValue = (figer === false ? -Number(arr.join('')) : Number(arr.join('')))
return (reverValue < leftMaxValue || reverValue > rightMaxValue) ? 0 : reverValue
}
console.log(reverseInt(123))
总结:使用思路二进行处理整数的反转,需要注意的一点是js除法会有小数要进行处理。