Daily-Interview-Question icon indicating copy to clipboard operation
Daily-Interview-Question copied to clipboard

第 99 题:编程算法题

Open yygmind opened this issue 5 years ago • 174 comments

用 JavaScript 写一个函数,输入 int 型,返回整数逆序后的字符串。如:输入整型 1234,返回字符串“4321”。要求必须使用递归函数调用,不能用全局变量,输入函数必须只有一个参数传入,必须返回字符串。

yygmind avatar Jul 04 '19 15:07 yygmind

function fun(num){
    let num1 = num / 10;
    let num2 = num % 10;
    if(num1<1){
        return num;
    }else{
        num1 = Math.floor(num1)
        return `${num2}${fun(num1)}`
    }
}
var a = fun(12345)
console.log(a)
console.log(typeof a)

zh1989cool avatar Jul 04 '19 16:07 zh1989cool

其实这种直接使用JavaScript的API更简单直观。


//  the first solution by recursion

const numToReverseStr = num => {

    if( 'number' !== typeof num ) throw '输入需为int型整数';

    if(!Math.floor(num / 10)) return num.toString();

    return (num % 10).toString() + numToReverseStr( Math.floor(num / 10) );
}

console.log(numToReverseStr(2169362));

//  the second solution not by recursion but JavaScript API

const numToReverseStr_0 = num => {

    return num.toString().split('').reverse().join('');
}

console.log(numToReverseStr_0(2169362));

dorseysen avatar Jul 05 '19 01:07 dorseysen

`function test(num) { var str = num + ""; if(str.length > 1) { var newStr = str.substring(str.length - 1); var oldStr = str.substring(0, str.length - 1); return newStr + test(oldStr) } else { return num }

}

var s = test(1234);

console.log(s);`

Gentlemancj avatar Jul 05 '19 01:07 Gentlemancj

function test(num){
	num = typeof num === 'number' ? num.toString() : num
	if(num.length <= 1) return num
	else return num[num.length - 1] + test(num.substring(0, num.length - 1))
}

lhj767382286 avatar Jul 05 '19 01:07 lhj767382286

function numberReverse(num) {
    const str = num.toString()
    return str.length === 1 ? str : numberReverse(str.substring(1)) + str.substring(0, 1)
}

这样行不,有错望指出

TH-coder avatar Jul 05 '19 01:07 TH-coder

function reverseNumber (num) { if ((num / 10 >> 0) === 0) { return (‘’ + num) } return ('' + num % 10 + reverseNumber(num / 10 >> 0) ) } 或者简化成三行代码 function reverseNumber (num) { return (num / 10 >> 0) === 0 ? ('' + num) : ('' + num % 10 + reverseNumber(num / 10 >> 0) ) }

huangxiaochang avatar Jul 05 '19 01:07 huangxiaochang


function out(value){
  
 if(value.length===0) return '';
  
 value =  Array.isArray(value)?value:value.toString().split('');
 
  return value.pop() + out(value);

}

kungithub avatar Jul 05 '19 02:07 kungithub

function reverseInt(intNumber) {
if (!(intNumber%10)) {
return ''
}
return (intNumber%10).toString() + reverseInt(parseInt(intNumber/10))
}

mcDullLi avatar Jul 05 '19 02:07 mcDullLi

`var a = 1234;

function reverse(a){ var a = a.toString(); if(a.length==1){ return a }else{ a = a.slice(-1)+reverse(a.slice(0,-1)); } return a }

reverse(a)`

toufaluanle avatar Jul 05 '19 02:07 toufaluanle

思路:先将传入的参数转为string,取该字符串的第二位至末尾作为下一次递归函数的参数,判断当前字符串长度是否大于1,大于1则递归调用,等于1就返回这个字符串

function myReverse(num){ 
  let str = num.toString()
  let num2 = parseInt(str.slice(1))
  
  if(str.length >1){
    return myReverse(num2) + str[0]
  }else {
    return str
  } 
}

console.log(myReverse(1234))

ch8839 avatar Jul 05 '19 03:07 ch8839

function reverse(num) {
  const str = `${num}`
  return str ? `${str % 10}${reverse(str.slice(0, str.length - 1))}` : ''
}

lhyt avatar Jul 05 '19 03:07 lhyt

image

yaonote avatar Jul 05 '19 04:07 yaonote

function renum(num) {
  num = num.toString()
  let rest = num.slice(0, -1),
    last = num.slice(-1);
  return last.length ? last + renum(rest) : ''
}

console.log(renum(12345678)); // 87654321

cjfff avatar Jul 05 '19 05:07 cjfff

如果能传两个参数的话,这个算法将会更好。 尾递归调用。性能上好不少。

function func(v, r = '') {
    v += ''
    if (v.length < 1) return r
    r += v.slice(v.length-1)
    v = v.slice(0, v.length-1)
    return func(v, r)

}
func(1234)
// "4321"

bran-nie avatar Jul 05 '19 06:07 bran-nie

如果能传两个参数的话,这个算法将会更好。 尾递归调用。性能上好不少。

function func(v, r = '') {
    v += ''
    if (v.length < 1) return r
    r += v.slice(v.length-1)
    v = v.slice(0, v.length-1)
    return func(v, r)

}
func(1234)
// "4321"

科里化一下就好了,在外面封装一层函数只接收参数v

YouziXR avatar Jul 05 '19 07:07 YouziXR

function fun(num){
    let num1 = num / 10;
    let num2 = num % 10;
    if(num1<1){
        return num;
    }else{
        num1 = Math.floor(num1)
        return `${num2}${fun(num1)}`
    }
}
var a = fun(12345)
console.log(a)
console.log(typeof a)

输入的数字小于 10 的时候返回的是整形

xuxchao avatar Jul 06 '19 01:07 xuxchao

const convert = num =>
   (num / 10) | 0
     ? String(num % 10) + convert((num / 10) | 0 )
     : String(num)

let res = convert(12345)
console.log(res) // 54321
console.log(typeof res)// string

momodiy avatar Jul 06 '19 08:07 momodiy

const calc = nums => nums.toString().split('').reduce((sum, num) => num + sum);

cycle07 avatar Jul 07 '19 06:07 cycle07

贴上两种方法

// es6
const reverse1 = (num) => [...num.toString()].reverse().join('');

// no variable
var intReverseRecursive = function intReverseRecursive(num) {
    if (typeof num === 'number') {
        // add an anchor at the end
        return intReverseRecursive((num + '#').split(''));
    } else {
        // stop recursive
        if (num.indexOf('#') === 0) {
            num.shift();
            return num.join('');
        } else {
            num.splice(num.indexOf('#'), 0, num.shift());
            return intReverseRecursive(num);
        }
    }
};

pengcc avatar Jul 07 '19 07:07 pengcc

function reverseNumber (num) { if ((num / 10 >> 0) === 0) { return (‘’ + num) } return ('' + num % 10 + reverseNumber(num / 10 >> 0) ) } 或者简化成三行代码 function reverseNumber (num) { return (num / 10 >> 0) === 0 ? ('' + num) : ('' + num % 10 + reverseNumber(num / 10 >> 0) ) }

你这个不行 image

zeybar avatar Jul 08 '19 06:07 zeybar

function intToString (int) {
	if (int >= 10) {
		return String(int % 10) + intToString(Math.floor(int / 10))
	}
	return String(int)
}

5SSS avatar Jul 08 '19 08:07 5SSS

function doo (num) {
    const str = `${num}`;
    const temp = str.length > 2 ? doo(str.slice(1)) : str.slice(1);

    return `${temp}${str[0]}`
}

先转成字符串,然后根据长度递归调用

Zousdie avatar Jul 08 '19 09:07 Zousdie

const reverse = num=>
    num!=0 ? `${num % 10}${reverse(num / 10 >> 0)}` : ''

参考了各位大佬的思路,用%10来取最后一位,用/10来减少位数,用>>0来去除小数点,最后用es6的模板字符串来返回字符串类型的结果

86XIng avatar Jul 08 '19 13:07 86XIng

用 JavaScript 写一个函数,输入 int 型,返回整数逆序后的字符串。如:输入整型 1234,返回字符串“4321”。要求必须使用递归函数调用,不能用全局变量,输入函数必须只有一个参数传入,必须返回字符串。

int型整数也包含负数,发现大多数解法(包括我的)都只考虑传入数值为正数的情况,题干中也没有相关示例,求解 @yygmind

momodiy avatar Jul 08 '19 13:07 momodiy

function fn1(num){
  var str = num.toString();
   let i = 0,newStr="";
   while(i<str.length){
      newStr+=str.slice(str.length-(i+1),str.length-i);
     i++
   }
return newStr;
}
fn1(1234)

RanTing1992 avatar Jul 08 '19 15:07 RanTing1992

var str = '12345'; function revert(str){ return str.length > 0 ? revert(str.slice(1)) + str[0] : str; }

FounderIsShadowWalker avatar Jul 09 '19 03:07 FounderIsShadowWalker

function fun(num){
    let num1 = num / 10;
    let num2 = num % 10;
    if(num1<1){
        return num;
    }else{
        num1 = Math.floor(num1)
        return `${num2}${fun(num1)}`
    }
}
var a = fun(12345)
console.log(a)
console.log(typeof a)

我觉着这个还是得加一些异常case,比如1000,或者负数

/**
 * @case 1234 => '4321'
 * @case 1000 => '1'
 * @case -1000 => '-1'
 * @case -1234 => '-4321'
 *
 * @param {number} number 传入的数值
 */
function solution(number) {
  if (number < 0) {
    return `-${solution(Math.abs(number))}`;
  }

  if (number < 10) {
    return `${number}`;
  }

  return `${number % 10 || ''}${solution(~~(number / 10))}`;
}

const assert = require('assert').strict;

assert.strictEqual(solution(1234), '4321');
assert.strictEqual(solution(1000), '1');
assert.strictEqual(solution(-1234), '-4321');
assert.strictEqual(solution(-1000), '-1');

feikerwu avatar Jul 09 '19 04:07 feikerwu

function reverseNum(x){
if(x<0){
return '-'+reverseNum(Math.abs(x))
}else if(typeof x === 'number'){
return reverseNum(String(x))
}
return x.length===0?x:reverseNum(x.slice(1)) + x[0]
}
reverseNum(1234560)
reverseNum(-1234560)

Weathers0086 avatar Jul 09 '19 06:07 Weathers0086

	function main(num){
		let [n, str] = ('' + num / 10).split(".");
                 return n > 0 ? str + main(n) : str;
	}

FEJiuL avatar Jul 09 '19 07:07 FEJiuL

题目很简单,增加一些异常判断好了

const reverse = (num) => {
  let type = num || undefined;
  if(Object.prototype.toString.call(type) !== '[object Number]') {
    return;
  }
  if(num < 0) {
    return '-' + reverse(num * -1)
  }
  let s = num + '';
  if(s.length > 1){
    let temp = s.substring(0,1);
    num = s.substring(1,s.length) - '';
    return reverse(num) + temp;
  }else {
    return num + '';
  }
}

JerryWang1996 avatar Jul 09 '19 08:07 JerryWang1996


function reverse (num) {
	
  num = typeof num  === 'number' ? num.toString() : num;
  
  if (num.length <= 1) return num;
  
  return `${num[num.length-1]}${reverse(num.slice(0, -1))}`

}

mongonice avatar Jul 09 '19 08:07 mongonice

var reverse = function(n) { n = n + ''; return Array.from(n).reduce((str, a) => { return a + str; }) }

zhengjianghao avatar Jul 09 '19 09:07 zhengjianghao

恕我直言

function print(n) {
  if (!n) return '0';
  let num2Str = n => {
    if (!n) return '';
    return `${n % 10}` + num2Str(~~(n / 10));
  }
  return num2Str(n);
}

LiuMengzhou avatar Jul 09 '19 11:07 LiuMengzhou

INT范围内不会有问题😊

function revNum(num){
  if(num < 10){
    return '' + num
  } else return '' + num%10 + revNum(num/10>>0)
}

Riteam avatar Jul 09 '19 16:07 Riteam

function reverseStr(num) { if (num < 10) { return num; }

let res = (num % 10) + "" + reverseStr(Math.floor(num / 10)); return res; }

ryhnatwoods avatar Jul 09 '19 17:07 ryhnatwoods

function foo(num){ if(typeof(num) == 'number'){ var a = num.toString(); var b = []; for (var i = a.length - 1; i >= 0; i--){ b.push(a[i]); } return foo(b); } return num.join(''); }

wonder0721 avatar Jul 10 '19 05:07 wonder0721

function sortNum2String(num){ let arr = (num+'').split(''); arr.sort((a,b)=>{ return b-a }) return arr.join('') }

Renser804 avatar Jul 10 '19 06:07 Renser804

function sortNum2String(num){ let arr = (num+'').split(''); arr.sort((a,b)=>{ return b-a }) return arr.join('') }

???

Drakes-0 avatar Jul 10 '19 08:07 Drakes-0

// 使用递归,只使用一个参数(利用柯里化)
function reverse(index) {
    return function (num) {
        num=num+'';
        if(index>=num.length/2||(index>=num.length/2-1&&num.length%2===1))return num;
        return reverse(index+1)(num.slice(0,index)+num[num.length-1-index]+num.slice(index+1,-index-1)+num[index]+(index!==0?num.slice(-index):''))
    }
}
reverse(0)(123456);

11341684 avatar Jul 10 '19 08:07 11341684

function bili(int){ if(int.toString().length <= 1){ return int } return (int/10).toString().slice(-1) + bili(parseInt(int/10)) }

bgwd666 avatar Jul 10 '19 09:07 bgwd666

function solution(number) {
  if (number < 0) {
    return `-${solution(Math.abs(number))}`;
  }

  if (number < 10) {
    return `${number}`;
  }

  return `${number % 10 || ''}${solution(~~(number / 10))}`;
}

我觉得这样才是正解,不考虑负数和倒过来是0就像耍流氓

atheist1 avatar Jul 10 '19 09:07 atheist1

function solution(number) {
  if (number < 0) {
    return `-${solution(Math.abs(number))}`;
  }

  if (number < 10) {
    return `${number}`;
  }

  return `${number % 10 || ''}${solution(~~(number / 10))}`;
}

测试了下,跟我的bug一样。1001的中间0都被Number化时去除了

atheist1 avatar Jul 10 '19 10:07 atheist1

function solution(number) {
  if (number < 0) {
    return `-${solution(Math.abs(number))}`;
  }

  if (number < 10) {
    return `${number}`;
  }

  return `${number % 10 || ''}${solution(~~(number / 10))}`;
}

测试了下,跟我的bug一样。1001的中间0都被Number化时去除了

单参就比较难了,双参的话就比较好写,用一个参数带初始number的位数信息,在去掉0的时候判断一下就行

feikerwu avatar Jul 10 '19 10:07 feikerwu

function solution(number) {
  if (number < 0) {
    return `-${solution(Math.abs(number))}`;
  }

  if (number < 10) {
    return `${number}`;
  }

  return `${number % 10 || ''}${solution(~~(number / 10))}`;
}

测试了下,跟我的bug一样。1001的中间0都被Number化时去除了

单参就比较难了,双参的话就比较好写,用一个参数带初始number的位数信息,在去掉0的时候判断一下就行

我觉得这才是这道题的难点,要不然不考虑这些真的是在耍流氓。。

atheist1 avatar Jul 10 '19 10:07 atheist1

function reverse(num){
  num = num + ''
  var len = num.length
  if(len == 1) return num
  return num[len - 1] + reverse(num.slice(0,-1))
}

console.log(reverse(1234))

Jean1024 avatar Jul 10 '19 10:07 Jean1024

function reverse(num){ return num.toString().split('').reverse().join('') }

MasonEast avatar Jul 10 '19 11:07 MasonEast

function solution(number) {
  if (number < 0) {
    return `-${solution(Math.abs(number))}`;
  }

  if (number < 10) {
    return `${number}`;
  }

  return `${number % 10 || ''}${solution(~~(number / 10))}`;
}

测试了下,跟我的bug一样。1001的中间0都被Number化时去除了

单参就比较难了,双参的话就比较好写,用一个参数带初始number的位数信息,在去掉0的时候判断一下就行

我觉得这才是这道题的难点,要不然不考虑这些真的是在耍流氓。。

用小数位来标示是否舍0,写的很复杂,暂时符合条件了。。

function solution(number) {
  if (number < 0) {
    return `-${solution(Math.abs(number))}`;
  }

  let integerPart = Math.floor(number);
  let decimal = `${number}`.split('.')[1];

  let numberSize = `${integerPart}`.length;

  if (number < 10) {
    return `${integerPart}`;
  }

  if (integerPart % 10 === 0) {
    let initialNumberSize = decimal || 0;
    // initialNumberSize === 0 => 初始number以0为结尾
    // +initialNumberSize === numberSize => 以2个以上0为结尾
    if (initialNumberSize === 0 || +initialNumberSize === numberSize) {
      return solution(parseFloat(`${~~(integerPart / 10)}.${numberSize - 1}`));
    }
    return `0${solution(
      parseFloat(`${~~(integerPart / 10)}.${initialNumberSize}`)
    )}`;
  }

  // 以小数标示从首位到最后一位非0位置的个数
  return `${integerPart % 10}${solution(
    parseFloat(`${~~(integerPart / 10)}.${decimal || numberSize}`)
  )}`;
}

const assert = require('assert').strict;

assert.strictEqual(solution(1234), '4321');
assert.strictEqual(solution(1000), '1');
assert.strictEqual(solution(-1234), '-4321');
assert.strictEqual(solution(-1000), '-1');
assert.strictEqual(solution(1011), '1101');
assert.strictEqual(solution(-1001), '-1001');

feikerwu avatar Jul 10 '19 11:07 feikerwu

function transformwrap(n){
  var sum=""
  function transform(n){
    if(n

MKLM0222 avatar Jul 11 '19 02:07 MKLM0222

function reverse(num) {
  if (num < 0) {
    return `-${reverse(Math.abs(num))}`
  }
  if (num < 10) {
    return num;
  }
  return `${num % 10}${reverse(Math.floor(num / 10))}`
}

test: reverse(123349495) "594943321" reverse(-123455) "-554321" reverse(-1234000055) "-5500004321" reverse(-12340000500005) "-50000500004321"

yaoqifa avatar Jul 11 '19 08:07 yaoqifa

function itoa (num) { return (num % 10 === 0 ? "" : num % 10) + (num >= 10 ? itoa(parseInt(num / 10)) : ""); }

young122849 avatar Jul 13 '19 14:07 young122849

`function convert(num){ if(!num){ return ''; } return num % 10 + convert((num / 10) | 0); }

var int = 12345; console.log(typeof convert(int));`

linlinyang avatar Jul 17 '19 07:07 linlinyang

let a = 2341
function b(num) {
    return num.toString().split('').sort((x,y) => {return y - x}).join('')
}
let str = b(a)
console.log(str)

Ning-X-S avatar Jul 18 '19 04:07 Ning-X-S

function rotate(nums) { let str = '' let current = nums%10 str = str+current if (Math.floor(nums/10) > 0 ) { return str+ rotate(Math.floor(nums/10)) } else { return str }

}

Hunterang avatar Jul 18 '19 04:07 Hunterang

function f(num) {
    let a = num%10
    if(num<10) return num+''
    return a + '' + f((num-a)/10)
}

gitHber avatar Jul 18 '19 10:07 gitHber

function reverse(n) {
    return n<0?'-'+reverse(Math.abs(n)):((n<10)?String(n): (n%10+''+reverse(Math.floor(n/10))));
}


yucopowo avatar Jul 22 '19 03:07 yucopowo

function test(num){ num=num.toString(); if(num.length==1){ return num }else{ return num.substring(num.length-1)+test(num.substring(0,num.length-1)) } }

ALaoGe avatar Jul 22 '19 07:07 ALaoGe

function print(num) { let yu = num%10; let shang = (num-yu)/10; return shang ? ${yu}${print2(shang)} : yu; }

liuliudaren avatar Jul 23 '19 03:07 liuliudaren

function sub(str){
    let out
     if(str.length>1){
       out=sub(str.substring(1))+str[0]
     }else{
       return str
     }
     return out
  }

NANAYWY avatar Jul 24 '19 07:07 NANAYWY

function f2(number){
	const str = number.toString();
	if(number < 10){
		return number.toString()
	}else {
		return str.slice(str.length-1, str.length)+ f2(str.slice(0, str.length-1));
	}
}

LastStranger avatar Jul 25 '19 11:07 LastStranger

考虑转化规则为: 1000逆序结果为'1' 而不是'0001' -1000逆序结果为'-1' 而不是'-0001'

function calc(num) {
  if (num < 0) {
    return `-${+calc(Math.abs(num) + '')}`;
  }
  if (num < 10) {
    return num;
  }
  let n = Math.floor(num / 10);
  let m = num % 10;
  let ans = `${m}${calc(n + '')}`;
  return (typeof num === 'string') ? ans : `${+ans}`;
}

francisXKF avatar Jul 26 '19 03:07 francisXKF

function helper(number) {
  if (number === 0) return "";
  return String(number % 10) + helper((number / 10) >> 0);
}

function reverseNumber(number) {
  if (number === 0) return "0";
  if (number < 0) return String(`-${helper(-1 * number)}`);
  return helper(number);
}

如果大家对算法感兴趣可以关注我的leetcode题解

azl397985856 avatar Jul 27 '19 06:07 azl397985856

用 JavaScript 写一个函数,输入 int 型,返回整数逆序后的字符串。如:输入整型 1234,返回字符串“4321”。要求必须使用递归函数调用,不能用全局变量,输入函数必须只有一个参数传入,必须返回字符串。

function reverse(data) {
        let arr = [];
        let val = data % 10;
        arr.push(val);
        if (val) {
            return arr.concat(reverse(parseInt(data / 10))).join("");
        };
    }

tangjie-93 avatar Jul 31 '19 00:07 tangjie-93

这样算不算玩文字游戏(😁

const convert = (number) => {
  let num = number
  while (num % 10 === 0) {
      num = num / 10
  }
  const _reverse = (str) => {
      return str.length <= 0 ? '' :`${_reverse(str.slice(1))}${str.slice(0,1)}`
  }
  return _reverse(`${num}`) 
}
convert(1234)
convert(1230)

tangdaoyuan avatar Aug 07 '19 09:08 tangdaoyuan

完了,难到我了,不能用爱发电了

XNNNN avatar Aug 07 '19 15:08 XNNNN

function reverse(num) {
  const str = num.toString();
  if(str.length === 1) return str; // 如果切分成一个数就返回
  const lastNum = str.slice(str.length -1); //  获取最后一个数
  return lastNum + reverse(str.slice(0, str.length -1));   // 递归相加
}

w3cay avatar Aug 10 '19 12:08 w3cay

入参数判断一下类型

const reverseNum = (num) => {
  //let str_arr = num.toString().split('')
  if (typeof num === 'number') {
    return reverseNum(num.toString().split('').reverse())
  } else if (Array.isArray(num)){
    return num.join('')
  } else {
    throw '输入需为int型整数'
  }
}

arnoldlynndeng avatar Aug 13 '19 08:08 arnoldlynndeng

function reverse(nums){
	const str = nums.toString()
	if(str.length===0){
		return str
	}
	return str.slice(-1) + reverse(str.slice(0,-1))
}
console.log(reverse(123456789))

helloyoucan avatar Aug 13 '19 10:08 helloyoucan

function reverse(num) {
    if(num.toString().length === 1){
        return num
    }
    return reverse(num.toString().slice(1)) + num.toString()[0];
}

zzNire avatar Aug 14 '19 13:08 zzNire

image

yangxinSamsara avatar Aug 15 '19 09:08 yangxinSamsara

function convert(number) {
	let s = number % 10
	let num = parseInt(number / 10)
	if(num <= 0) {
		return s
	}
	return `${s}${convert(num)}`
}
convert(1234)

xing-zlear avatar Aug 15 '19 10:08 xing-zlear

function convert(str) {
    str = (str).toString()
    if (str)
        return convert(str.substr(1)) + str.substr(0, 1)
    return ''
}
convert(12345)

GoldWorker avatar Aug 23 '19 08:08 GoldWorker

const numToReverseStr = (num) => {
  let result = num % 10;
  if (num === 0) {
    return ''
  }
  const newNum = Number(String(num).slice(0 ,-1));
  return String(result) + numToReverseStr(newNum);
}

leonwens avatar Aug 29 '19 12:08 leonwens


function getRerviseString(num) {
    if (num < 10) return num;
    return (num % 10) + '' + getRerviseString(((num - (num % 10)) / 10))

}

console.log(getRerviseString(4576567567))

考递归相关的知识

chengwen-zheng avatar Aug 30 '19 08:08 chengwen-zheng

function reverse(num) {
  return String(num).split('').reverse().join('');
}

function reverse2(num) {
  if (num < 10) {
    return String(num);
  } else {
    return String(num % 10) + reverse2(Math.floor(num / 10));
  }
}

function reverse3(num) {
  let result = '';
  while(num) {
    result += String(num % 10);
    num = Math.floor(num / 10);
  }
  return result;
}

console.log(reverse(1234567));
console.log(reverse2(1234567));
console.log(reverse3(1234567));

shenxinle avatar Sep 02 '19 07:09 shenxinle

function fun(num){
    let num1 = num / 10;
    let num2 = num % 10;
    if(num1<1){
        return num;
    }else{
        num1 = Math.floor(num1)
        return `${num2}${fun(num1)}`
    }
}
var a = fun(12345)
console.log(a)
console.log(typeof a)

let intToStr = function(num) { let num1 = num / 10; let num2 = num % 10; if (num1 < 1) { return ${num} } else { num1 = Math.floor(num1); return ${num2}${intToStr(num1)} } } let result = intToStr(1234); console.log(result, typeof result);

callmezhenzhen avatar Sep 02 '19 07:09 callmezhenzhen

!function(num){
    let span='';
    while(Math.floor(num)>=1){
        const temp = num%10;
        num/=10;
        span+=temp|0;
    }
    console.log(span)//4321
}(num=1234)

fnlearner avatar Sep 11 '19 06:09 fnlearner

/**
 * 用 JavaScript 写一个函数,输入 int 型,返回整数逆序后的字符串。如:输入整型 1234,返回字符串“4321”。要求必须使用递归函数调用,不能用全局变量,输入函数必须只有一个参数传入,必须返回字符串。
 * @param {Number} num
 * @returns {String}
 */
function reverse(num) {
  let arr = Number.isInteger(num) ? ['', num.toString()] : num;
  if (arr[1].length > 0) {
    let copyArr = [...arr[1]];
    return reverse([(arr[0] += copyArr.pop()), copyArr.join('')]);
  }
  return arr[0];
}
console.log(reverse(1234));

function reverse(num) {
  if (num) return reverse(num.toString().substring(1)) + num.toString().substring(0, 1);
  return '';
}
console.log(reverse(1234));

yaodongyi avatar Sep 20 '19 10:09 yaodongyi

function ints(num) { var str = String(num),i=str.length; if(i>1) { var newNum = Number(str.substring(0,i-1)); var d = str.substring(i-1); return d+ints(newNum); }else { return num; } } ints(1234);

NinoHuang avatar Oct 14 '19 09:10 NinoHuang

// 当前仅考虑非负整数
function intReverse(num) {
	if(!/^[1-9]\d*|0$/.test(num)) {throw new Error('请传入非负整数')};

	strNumber = num + '';
	if(strNumber.length === 1) {return strNumber};

	let tail = strNumber.slice(-1);
	let rest = parseInt(strNumber.slice(0,-1));
	return  tail + intReverse(rest)
}

Minsaint avatar Oct 19 '19 14:10 Minsaint

function test(num){
	num = typeof num === 'number' ? num.toString() : num
	if(num.length <= 1) return num
	else return num[num.length - 1] + test(num.substring(0, num.length - 1))
}

test的输入必须为整数,输出必须为字符串

Bellhey avatar Nov 04 '19 12:11 Bellhey

function intToStringReverse(num){
  if(num <= 0) return ""
  return "" + num % 10 + intToStringReverse(parseInt(num / 10))
}

Zhengshuda avatar Nov 06 '19 14:11 Zhengshuda

如果能传两个参数的话,这个算法将会更好。 尾递归调用。性能上好不少。

function func(v, r = '') {
    v += ''
    if (v.length < 1) return r
    r += v.slice(v.length-1)
    v = v.slice(0, v.length-1)
    return func(v, r)

}
func(1234)
// "4321"
function func(v) {
    var r = [...arguments][1] || ''
    v += ''
    if (v.length < 1) return r * 1
    r += v.slice(v.length-1)
    v = v.slice(0, v.length-1)
    return func(v, r)
}

在您代码上加了俩点:1、省去第二个参数,2、输出数字格式

webdazhuo avatar Nov 11 '19 16:11 webdazhuo

function reverse(num) { const input = new String(num)

if (input.length <= 1) return input;

return input[input.length - 1] + reverse(input.slice(1, input.length - 1)) + input[0]; }

jonas-wu avatar Nov 14 '19 01:11 jonas-wu

function bilibili(num) { if (num.toString().length < 2) { return num.toString() } let a = Math.floor(num / 10) let b = num % 10 return ${b}${bilibili(a)} }

guozhl avatar Nov 21 '19 02:11 guozhl

function fun(num){
    let num1 = num / 10;
    let num2 = num % 10;
    if(num1<1){
        return num;
    }else{
        num1 = Math.floor(num1)
        return `${num2}${fun(num1)}`
    }
}
var a = fun(12345)
console.log(a)
console.log(typeof a)

思路也太巧妙了

bosens-China avatar Nov 28 '19 01:11 bosens-China

function reverse(num) {
    if (!num) return '';
    return '' + num % 10 + reverse(parseInt(num / 10));
}

Fzzzzy avatar Dec 02 '19 11:12 Fzzzzy

const num = 1234;
function func(number) {
    return number > 9 ? String(number % 10) + func(Math.floor(number / 10)) : String(number);
}
console.log(func(1234), typeof func(1234))

zhouqihang avatar Dec 17 '19 10:12 zhouqihang

` function reverseInt(int) { if(!Number.isInteger(int) || arguments.length !== 1) { return new Error('only one params was required and must be a interger number') } int += '' const cut = int.slice(-1) if(int.length == 1) { return int } else { int = int.substr(0,int.length - 1) return cut + reverseInt(int) }

} console.log(typeof reverseInt(23645583)) // 'string' console.log(reverseInt(23645583)) // 38556432 console.log(reverseInt(23645583.123)) // 报错 console.log(reverseInt(123,23645583)) // 报错 `

bbrucechen avatar Dec 26 '19 02:12 bbrucechen

function formatNumber(num) {
  let str = num.toString();
  const length = str.length;
  let value = '';
  if (length > 1) {    
    let subStr = str.substr(0, length - 1)
    let next = parseInt(subStr)
    value = str.substr(length - 1, 1)  + formatNumber(next)             
  } else {
    value = str.substr(length - 1, 1) 
  }
  return value
}

let value = formatNumber(2020)
console.log(value)
// "0202"

purplepeng avatar Jan 01 '20 14:01 purplepeng



function reserve(num) {
    let str = num.toString();
    let len = str.length
    let first = str[len - 1]
    if (str.length > 1) {
        return first + reserve(str.substring(0, len-1))
    } else {
        return first
    }
}
console.log(reserve(423456777));
console.log(typeof(reserve(423456777)));

SSSSSFFFFF avatar Jan 16 '20 08:01 SSSSSFFFFF

function reverseInt(num) { return num < 10 ? num : ${num % 10}${reverseInt(parseInt(num / 10))} } 这样它不香么

fasign avatar Jan 17 '20 02:01 fasign

香但是差一点。必须返回字符串。reverseInt(1) number function reverseInt(num) { if(num < 10) return num+''; return ${num % 10}${reverseInt(parseInt(num / 10))} }

------------------ 原始邮件 ------------------ 发件人: "fasign"<[email protected]>; 发送时间: 2020年1月17日(星期五) 上午10:29 收件人: "Advanced-Frontend/Daily-Interview-Question"<[email protected]>; 抄送: "杭州电子科技大学-胡大昌"<[email protected]>; "Comment"<[email protected]>; 主题: Re: [Advanced-Frontend/Daily-Interview-Question] 第 99 题:编程算法题 (#153)

function reverseInt(num) { if(num < 10) return num return ${num % 10}${reverseInt(parseInt(num / 10))} }

这样它不香么

— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.

hduhdc avatar Jan 17 '20 02:01 hduhdc

function r (n) {
    if (n.length <= 1) {
        return n
    }
    const first = n[0]
    const rest = n.slice(1)
    return r(rest) + first
}

Thinker-ljn avatar Jan 20 '20 06:01 Thinker-ljn

function reverse(num) {
    if (num===0) return '';
    return parseInt(num%10) + '' + reverse(parseInt(num/10))
}

JaysonZou avatar Feb 05 '20 07:02 JaysonZou

function outerFn(num){ var count=0 var str=num+"" var l=str.length var result="" function innerFn(){ if(count==l) return console.log(result) result+=str.slice(-count-1)[0] count++ innerFn() } return innerFn() } outerFn(31234)//43213

linbaichuan0818 avatar Feb 09 '20 02:02 linbaichuan0818

负数+尾递归

function reverseNumber(number) {
  const flag = number < 0 ? -1 : 1;
  number = Math.abs(number);

  const pre = [...arguments][1] || '';

  if (number < 10) {
    return pre + String(number);
  }
  return reverseNumber(Math.floor(number / 10), pre + flag * (number % 10));
}

yzin-yang avatar Feb 12 '20 10:02 yzin-yang

代码 如下,支持负数

function reverseNum(num) {
  if(num < 0) return '-' + reverseNum(Math.abs(num));
  let str = num.toString();
  return str.length === 1 ? str : str.slice(-1) + reverseNum(str.slice(0,-1));
}

307590317 avatar Feb 17 '20 07:02 307590317

function reverse(num, i = 0, acc = '') {
    if (typeof num == 'number') {
        num += '';
        i = num.length - 1;
    }

    if (i < 0) {
        return acc;
    }

    acc += num[i];

    return reverse(num.substring(0, i--), i, acc);
}
reverse(1234); // 4321
// 符合ES6尾调用优化规则

herly-js avatar Feb 22 '20 07:02 herly-js

function reverse(num) {
   if(num > 10) {
      let a = num / 10
      let b = num % 10
      return b + reverse((num - b) / 10)
   }else if(num < 0) {
      return reverse(-num) + '-'
   }else {
      return num + ''
   }
}

daycool avatar Feb 26 '20 12:02 daycool

function reverseNum(num){
  if(num<10){
    return String(num)
  }
  let min1 = Math.floor(num/10);
  let min2 = num%10;
  if(min1<10){
    return `${min2}${min1}`;
  }
  return `${min2}${reverseNum(min1)}`
}

kiliaosi avatar Mar 10 '20 03:03 kiliaosi