Given a 32-bit signed integer, reverse digits of an integer.
Example 1:
Input: 123 Output: 321
Example 2:
Input: -123 Output: -321
Example 3:
Input: 120 Output: 21
Note:
Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [−2^31, 2^31 − 1]. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.
很基础的问题,反转整数。但有三处细节要注意:
① 题目假设只能存储 32 位有符号整数,要注意32位interger的取值范围,若整数溢出,则返回 0;
② 符号位不参与翻转;
③ 若反转后首位为0需要去除。
var reverse = function(x) {
var flag = true
var s = x.toString()
if(s[0] === '-'){
flag = false
s = s.substring(1)
}
while(s[s.length-1] === '0'){
s = s.substring(0, s.length-1)
}
arr = s.split('')
arr = arr.reverse()
if(flag == false){
arr.unshift('-')
}
var ans = arr.join('')
return ans >= -Math.pow(2,31) && ans <= Math.pow(2,31)-1 ? ans : 0
};
对于此题,我的做法比较原始,将整数转换为字符串再转换为数组,利用数组的反转方法解答,代码如上。
然后在网上查到其他一些解法,以作思路参考:
① 该方法亦比较基础,整数转换为字符串,再将字符串反向压入数组。
var reverse = function(x) {
var str = x.toString();
var resArr = [];
for(var i = str.length-1; i > 0; i--){
resArr.push(str[i]);
}
if(str[0] == "-"){
resArr.unshift("-");
}
resArr.push(str[0]);
var resultNum = parseInt(resArr.join(""));
if(resultNum <= Math.pow(-2,31) || resultNum >= Math.pow(2,31) - 1 ){
return 0;
}
return resultNum;
};
② 该方法基于整数本身,不需要进行类型转换,称之为“模十法”:初始化一个result=0,把给定的数字n除以十,得到余数作为最低位,商作为新的数字n, result = result+余数*10,这样每次得到的最低位就会随着循环不断提升数位,从而得到逆序的result。
var reverse = function(x) {
var y = Math.abs(x);
var result = 0;
while(y > 0){
result = result * 10 + y % 10;
y = parseInt(y / 10);
}
result = x < 0 ? -result : result;
return result >= -Math.pow(2,31) && result <= Math.pow(2,31) - 1 ? result : 0;
};
③ 该方法并不符合题目的要求,只是针对整数反转提供一个思路:
<script>
var n=prompt("请输入一个数")
if (n>0){
alert("是正整数")
}
else {
alert("不是正整数")
}
for (var x = n.length-1; x >=0; x--){
document.write(n.charAt(x));
}
</script>
由此复习一波整数、字符串和数组之间的转换,以及常用的方法:
1、字符串与数组之间的转换
① 字符串转为数组:
var arr = str.split('')
var arr = str.splite('-')
② 数组转为字符串:
var str = arr.join('')
var str = arr.join('-')
2、整数与字符串之间的转换
①字符串转数字
- parseInt()函数
返回解析到的第一个整数,如果解析不到数字,则将返回一个NaN的值,可以用isNaN()函数来检测。
parseInt('123') //返回 123;
parseInt('1234xxx') //返回 1234;
parseInt('123.456') //返回 123;
parseInt('1 2 3') //返回 1;字符串的情况,自会返回第一个数
parseInt('bb cc 12') //返回 NaN;字符串第一个不是数,返回nan
parseInt('123' 321) //返回 321;
parseInt("AF", 16) //返回 175;会自动把二进制十六进制八进制的转化成数字
- 字符前加“+”
var n = +"123" //返回123
- 字符加“*1”
var n = "123"*1 //返回123
②数字转字符串
- toString()
n = 2018
s = n.toString() //“2018”
- 数字+''
var n = 1234
var s = n + ''
3、以及其他方法
① 替换指定位置字符
a.splice(1,1,'abcd')
② 数组翻转
arr = arr.reverse()