【leetcode】Reverse Integer(整数、字符串和数组之间转换)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014322206/article/details/84720533

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的取值范围\small [-2^{31}, 2^{31}-1],若整数溢出,则返回 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()

猜你喜欢

转载自blog.csdn.net/u014322206/article/details/84720533
今日推荐