js实现数字逆序

2,001 阅读1分钟

let number = 12345

期待输出结果: 54321

方法一: 

function reverseNumber(number){
    let _num = String(number).split('')
    let _result= [];
    let _len = _num.length;
    for(let i =0; i< _num.length; i++){
        _result[i] =  _num[ _len  - 1- i ];
    }
   return Number(_result.join(''));
}
reverseNumber(number)    //54321

时间复杂度: O(n)
空间复杂度: O(n)


方法二: 

function reverseNumber(number){
    let _result = [];
    let _num;
    while( number > 0 ){
        _num = number % 10;
        _result.push(_num);
        number = parseInt( number / 10 )
    }
    return Number( _result.join(''));}
reverseNumber(number); //54321
时间复杂度: O(n)
空间复杂度: O(n)


方法三:

function reverseNumber(number){
    let _num = String(number);
    let _result = '';
    for( let i = _num.length -1; i >= 0; i-- ){
        _result += _num.charAt(i)    
    }
    return Number(_result)
}
reverseNumber(number); //54321

时间复杂度: O(n)


方法四:

function reverseNumber(number){
    let _num = String(number).split('')
    _num =  _num .reduce( (x ,y ) => `${y}${x}` )
    return Number(_num )
}

reverseNumber(number); //54321
时间复杂度: O(n)
空间复杂度: O(n)


方法五:

function reverseNumber(number){
    let _num = String(number).split('');
    return Number(_num.reverse().join(''));
}
reverseNumber(number); //54321

Tips: 

  •  大部分思路都是将数字变成字符串处理。最后需要将字符串转成数字,用Number or ParseInt()都可以。但是当数字最后一位为0的时候,逆序并转成数字之后0会被抹掉。
  • 关于parseInt
    • 使用ParseInt(number,10) 默认按十进制处理。
    • 如果前缀为0,则js会把数值常量解释为八进制,如果前缀为0和‘x’,则解释为十六进制数。


parseInt(12345)    //12345   10进制
parseInt(012345)   //5349     ===>parseInt(12345,8)
parseInt(012345,8) //348      ===>parseInt(parseInt(12345,8),8)